1

我正在调用返回 JSON 数据的 RESTFUL Web 服务。响应包含一个数值(不带引号)10000000000223169,但在针对此响应获取 JavaScript 对象后,我得到 10000000000223168。

直接在浏览器中显示的 JSON 响应也显示 10000000000223168 但内容选项卡中的 FireBug HTTP 响应显示正确的值,即 10000000000223169

4

2 回答 2

4

这是因为 JavaScript 中的数字是IEEE754 双精度浮点数

整数最多只能表示为 2^53。

您的号码太大,无法作为号码发送,您应该将其作为字符串发送。

如果您需要在浏览器中使用此数字进行计算,最简单的解决方案是使用大数字专用库(请参阅此相关问题)。

于 2013-04-12T13:28:22.567 回答
2

10000000000223169 超出了在 JavaScript(以及 JSON)中可以表示为精确整数的范围。它大约是2 ^ 53.151,而 IEEE 754 仅允许双精度浮点数尾数中的 53 位分辨率。

要在不修改的情况下传输它,需要将其作为字符串发送。

在使用此代码的客户端中,还需要将其存储为字符串或 64 位整数(假设您使用的是具有这种数据类型的语言)。

如果您尝试将其存储在 IEEE 754 浮点数中(这是 JS 中的默认数字类型,只要您尝试对其执行任何数学运算,它仍会四舍五入为 53 位精度。

于 2013-04-12T13:28:13.997 回答