javascript中的Stange功能

Jan*_*Ven 4 javascript

可能重复:
大量错误在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节包含更多细节.