从字符串到浮点数的奇怪转换

Weird conversion from String to float

本文关键字:转换 浮点数 字符串      更新时间:2023-09-26

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

在这个Web视图中,我执行某些JavaScript操作。

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

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

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

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

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

到目前为止一切都很好。

但是字符串参数持有看起来像一个浮点值。

那么在js端看起来像这样:

1344810353

在我的界面上出现如下:

1.34447e+09

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

这不是真正的转换,它只是使用科学记数法将其重写为更少的十进制数字。
四舍五入到 6 位数字的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);
});

那里发生的事情不是转换为浮点数,但你得到了该整数的科学记数法。它一定发生在康卡特中。你不能做这样的事情吗:

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