可能重复:
在 Javascript 中错误地舍入大数字
在 javascript 中处理数字时,我遇到了一些奇怪的行为。当我使用以下代码时:
<a href="javascript:console.log({'id':9200000000032337}.id);"> CLICK HERE </a>
我在控制台中得到数字 920000000003233 6。我认为它最有可能是数字的四舍五入或最大值,但我并不完全理解。任何人?
可能重复:
在 Javascript 中错误地舍入大数字
在 javascript 中处理数字时,我遇到了一些奇怪的行为。当我使用以下代码时:
<a href="javascript:console.log({'id':9200000000032337}.id);"> CLICK HERE </a>
我在控制台中得到数字 920000000003233 6。我认为它最有可能是数字的四舍五入或最大值,但我并不完全理解。任何人?
我不是 Javascript 专家,但听起来您的号码被存储为 IEEE-754 64 位浮点数。当然,这就是我从 C# 代码中得到的,它将显示 a 的确切值double
:
double d = 9200000000032337;
Console.WriteLine(DoubleConverter.ToExactString(d));
(使用我自己的DoubleConverter
类。)我的输出与您的相同:9200000000032336
浮点值只能准确地保存一定数量的有效数字 - 当数字变得足够高时,即使是整数也无法准确存储。
ECMA-262似乎证实了这一点:
4.3.19 对应于双精度 64 位二进制格式 IEEE 754 值的
数值原始值
并从第 7.8.3 节(数字文字):
数字文字代表 Number 类型的值。该值分两步确定:首先,从字面量导出一个数学值(MV);其次,该数学值按如下所述四舍五入。
第 8.5 节包含更多细节。