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