gpt4 book ai didi

javascript - 通过选择性评估将 JSON 字符串转换为对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:29:07 25 4
gpt4 key购买 nike

我有一个字符串:

"{0:16970861903381446063,length:1}"

我尝试使用 eval 方法将它转换为一个对象,但它也会计算字符串并因此舍入数值,返回:

{0:16970861903381447000,length:1}

在调用 eval 之前,我尝试将数字作为字符串传递,在创建 JSON 字符串时使用 16970861903381446063 + '' 作为值;用 typeof 检查它显示它是 string 类型,但它仍然将数字 16970861903381446063 舍入为 16970861903381447000。

有什么方法可以绕过这个,或者有更好的方法吗?

以下是从包含数字的数组生成 json 文本的代码

function simplify(arr){
request = "{";
if (arr.length ==1){
request += 0 + ":" + (arr[0] + '') + "," ;
}
else{
for (var i=0;i<=arr.length-1 ;i++){

request += i + ":" + (arr[i] + '') + ",";
}
}
request += "length" + ":" + arr.length +"}";
return request;
}

最佳答案

您遇到了 IEEE double float 的精度问题,它使用 53 位作为尾数,11 位作为指数。

Javascript 数字,所有这些数字,都由 64 位 float 表示。许多语言中的 float 由两部分表示,尾数和指数。在 Javascript 中,尾数为 53 位,指数为 11 位。

例如,当您看到数字表示为 3.5346367e+22 时,尾数为 3.5246367,指数为 22。

您尝试存储的数字大于尾数的最大值,因此您的数字会四舍五入,而较大的数字会得到一个指数。

长话短说,除非您对这些巨大的数字进行算术运算,否则您应该将它们存储为字符串。

最后,您应该将 JSON 数组表示为实际的 JSON 数组,而不是通过定义整数键和长度属性伪装成数组的对象:

// Do this
json = '["16970861903381446063"]';

// Not this
json = '{0:"16970861903381446063", length:1}';

关于javascript - 通过选择性评估将 JSON 字符串转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1121833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com