我正在尝试从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 字符串相关部分的摘录一起发布)。
我假设您可能会不小心在该函数中将字符串转换为数字(可能使用 +
)!