大的 JavaScript ints 不会在不舍入的情况下转换为字符串



我正在尝试从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 写入元素的文本时,它看起来不错。但是,当我将其传递给函数时,它会将其舍入。

从这篇文章来看,Javascript中整数可以取的最大值是9007199254740992

你的13934317650292905813数字远不止于此。

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

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

'当我将传递的 int 写入元素时,它看起来不错' 文本。但是,当我将其传递给函数时,它会将其四舍五入。

在您的评论中:

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

这意味着您已经将"整数"作为 JSON 中的文本字符串。

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

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

将字符串'13934317650292905813'传递给 initBuy 函数也会返回字符串'13934317650292905813'(它应该返回

)。

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

我假设您已经简化了这个问题的initBuy函数(您必须发布原始函数以供进一步检查,最好与原始 JSON 字符串相关部分的摘录一起发布)。

我假设您可能会不小心在该函数中将字符串转换为数字(可能使用 +)!

最新更新