JavaScript数字采用IEEE 754双精度浮点格式存储,这解释了0.1+0.2≠0.3等现象。本文将详细剖析其底层原理与典型特性。

双精度浮点数包含三个关键部分:
该结构导致JavaScript能精确表示的整数存在上限——绝对值不超过9,007,199,254,740,991(即2⁵³−1)。超过该值时,相邻数值间隔将大于等于2。
常见十进制小数在二进制中往往呈现无限循环特性:
由于尾数域仅52位,这些无限循环小数会被截断处理,产生约±2⁻⁵³的相对误差。多个近似值运算后,结果自然不等于数学上的精确值。
IEEE 754定义两种数值表示形式:
虽然JavaScript支持非规格化数(如5e-324),但其运算效率较低,且低于该值时会发生下溢归零。
标准定义了若干特殊数值状态:
这些特性并非语言缺陷,而是IEEE 754标准的规定。例如NaN不等于自身的特性,正是标准要求的明确行为。
理解JavaScript数字的存储机制,能有效避免精度问题引发的开发陷阱,提升数值运算的可靠性。