如果不进行舍入,大型JavaScript int将不会转换为String

时间:2014-11-23 01:11:03

标签: javascript html bigint

我正在尝试将一个大型int传递给HTML中的onclick事件中的函数。整体总是很长,如果没有四舍五入,我似乎无法将它传递给我的函数。我已经尝试了一些bigInt库到同一端,但我更喜欢简单的字符串转换。

我的js功能:

    function initBuy(id){
      console.log(id.toString());
    }

和我的HTML事件:

<dt></dt><dd><a id="buy" onclick="initBuy(String(' + all_data[index].listing_id + '))" class="btn btn-success">Buy This Item</a></dd>

传递int的示例:

13934317650292905813

以及点击按钮的结果:

"13934317650292906000"

当我将它写入元素时,传递的int看起来很好。文本。然而,当我将它传递给函数时,它会将它四舍五入。

2 个答案:

答案 0 :(得分:1)

从帖子here开始,Javascript中的整数最大值为9007199254740992

您的号码13934317650292905813远远大于此值。

在这篇文章here中,您可以使用BigInteger.js来容纳大整数

答案 1 :(得分:0)

你在(模棱两可的)问题中说:

  

&#39;当我将它写入元素时,传递的int看起来很好。文本。但是,当我将它传递给函数时,它会将其四舍五入。&#39;

并在你的评论中:

  

如果我将all_data[index].listing_id设置为元素文本,则可以正常工作。

这意味着你已经获得了整数&#39;作为JSON中的文本字符串。

当前问题中没有任何内容将字符串转换为数字(我测试过) 一旦字符串被转换为数字,它将溢出IEEE 754的最大准确度2 ^ 53 = 9007199254740992。

请注意:initBuy(String(' + all_data[index].listing_id + '))
将返回字符串+ all_data[index].listing_id +(应该如此)。

将字符串'13934317650292905813'传递给initBuy函数也会返回字符串'13934317650292905813'(应该如此)。

换句话说,我无法使用您提供的代码重现您的问题。

我假设你已经简化了这个问题的initBuy功能(你必须发布原始版本以供进一步检查,最好与 raw <的相关部分的摘录一起发布/ em> JSON字符串)。

我认为可能会意外地将字符串转换为该函数内的数字(可能使用+)!