我正在调用返回 JSON 数据的 RESTFUL Web 服务。响应包含一个数值(不带引号)10000000000223169,但在针对此响应获取 JavaScript 对象后,我得到 10000000000223168。
直接在浏览器中显示的 JSON 响应也显示 10000000000223168 但内容选项卡中的 FireBug HTTP 响应显示正确的值,即 10000000000223169
我正在调用返回 JSON 数据的 RESTFUL Web 服务。响应包含一个数值(不带引号)10000000000223169,但在针对此响应获取 JavaScript 对象后,我得到 10000000000223168。
直接在浏览器中显示的 JSON 响应也显示 10000000000223168 但内容选项卡中的 FireBug HTTP 响应显示正确的值,即 10000000000223169
这是因为 JavaScript 中的数字是IEEE754 双精度浮点数。
整数最多只能表示为 2^53。
您的号码太大,无法作为号码发送,您应该将其作为字符串发送。
如果您需要在浏览器中使用此数字进行计算,最简单的解决方案是使用大数字专用库(请参阅此相关问题)。
10000000000223169 超出了在 JavaScript(以及 JSON)中可以表示为精确整数的范围。它大约是2 ^ 53.151,而 IEEE 754 仅允许双精度浮点数尾数中的 53 位分辨率。
要在不修改的情况下传输它,需要将其作为字符串发送。
在使用此代码的客户端中,还需要将其存储为字符串或 64 位整数(假设您使用的是具有这种数据类型的语言)。
如果您尝试将其存储在 IEEE 754 浮点数中(这是 JS 中的默认数字类型,只要您尝试对其执行任何数学运算,它仍会四舍五入为 53 位精度。