JSON.Stringify()对大数值会改变数字的值吗?

6
我有一个返回具有longList<string>属性的WCF服务操作。当我在WCF应用程序中测试该操作时,一切正常,值是正确的。但是,我需要能够使用jQuery和JSON格式调用服务。当我在OnSucceed函数中读取long属性的值时,它似乎发生了变化。
经过搜索,我发现JSON.stringify会更改大值。所以在这样的代码中:
alert(JSON.stringify(25001509088465005));

当使用console.log()打印数字25001509088465004时,它会显示该值。

发生了什么?

演示在此:http://jsfiddle.net/naveen/tPKw7/


请让您的问题更加清晰明了。 - Code Lღver
只需测试上面的JavaScript代码,查看您发送了什么以及JSON.stringify返回了什么。 - Amir Mohsen
2
由于 JavaScript 的 Number 类型精度限制。参见:https://dev59.com/G3RB5IYBdhLWcg3wj36c - mbarkhau
1
@Gaurav:问题非常清晰明了。只需尝试一下即可。 - naveen
2
@Amir Mohsen:这与JSON实际上没有任何关系。试试这个。alert(25001509088465005); - naveen
JSON.stringify将JSON对象转换为数组。 您可以使用JSON.parse代替stringify函数。 请确保您已返回一个JSON对象。 - Code Lღver
1个回答

4
JavaScript使用IEEE-754双精度(64位)格式表示数字。据我了解,这给出了53位精度,或十五到十六个十进制数字。如果您的数字比JavaScript可以处理的还要大,则最终得到的是一个近似值。
您是否需要对这个大数字进行数学运算?因为如果它只是某种ID,您可以将其作为字符串返回并避免问题。

是的,但我想把它作为长字符串,最终我收到的是字符串,这就是结束了。 - Amir Mohsen
JavaScript中没有“长整型”数据类型,只有Number。 - Anders Marzi Tornblad
是的,我应该明确地说“JavaScript使用_所有_数字表示...” - nnnnnn
最后我使用了字符串而不是那个17位数字,现在生活美好了。 - Amir Mohsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接