0

我有一个带有 javascript 接口的 webview。

在这个 webview 中,我执行某些 javascript 操作。

在其中一个中,我为我的 web 内容中的一个元素设置了 onclick 属性。(使用jQuery)

button.attr("onclick", "Android.doStuff(".concat(stringContainingOnlyNumbers).concat(")"));

正如您可能猜到的那样,变量 stringContainingOnlyNumbers 包含一个仅包含数字的字符串。

Android 是我的 javascript 界面的关键字。

如果我单击我操作的按钮,doStuff 方法将在界面上被调用。

到目前为止一切都很好。

但是 String Parameter 持有的东西看起来像一个浮点值。

所以在 js 端看起来像这样:

1344810353

像这样出现在我的界面上:

1.34447e+09

谁能在这里帮我解释一下为什么会发生这种转换?

4

2 回答 2

3

这并不是真正的转换,它只是使用科学记数法将其重写为更少的十进制数字。
1344810353 四舍五入为 1.34447e+09,即 1.34447 * 10^9。

它是一个浮点数,当将数字连接为字符串时,javascript 倾向于缩短数字。
这是一个示例: http: //jsfiddle.net/YGC8B/

您可以通过遍历数字并一一显示来解决此问题。

function getString(number) {
    var numstring = "";
    var num = number;
    while (num > 0) {
        numstring = num % 10 + numstring;
        num -= num % 10;
        num /= 10;
    }
    return numstring;
}
var number = 1344810353;
log(getString(number)); // or however your output it

这是一个工作示例: http: //jsfiddle.net/Tj5Zy/


旁注:

最好不要使用元素的onclick属性,它已被略微弃用。我建议附上活动。
而且由于您使用的是 jQuery,所以一切都变得更加简单。

button.bind('click',function() {
    Android.doStuff(stringContainingOnlyNumbers);
});
于 2012-08-16T15:03:23.927 回答
1

发生的事情不是转换为浮点数,但是您得到了该整数的科学记数法。它必须发生在 concat 中。你不能做这样的事情:

button.attr("onclick", "Android.doStuff(" + stringContainingOnlyNumbers + ")");

?

于 2012-08-16T15:01:31.293 回答