How does JavaScript determine the number of digits to produce when formatting floating-point values?
在javascript中,每个人都知道著名的计算:
将
javascript使用ieee-754基本64位二进制浮点作为其
- 将".1"转换为可在
Number 类型中表示的最接近的值。 - 将".2"转换为可在
Number 类型中表示的最接近的值。 - 将上述两个值相加,并将结果四舍五入到
Number 类型中可表示的最近值。
当格式化显示的
0.299999999999999988897769753748434595763683319091796875 ,0.3000000000000000444089209850062616169452667236328125 和- 江户十一〔11〕。
如果转换为十进制数字只产生"0.3000000000000000",则它将接近于0.29999999999988897769753748434595763683319091796875,而不是0.300000000000000444089208500626616945267236328125。因此,需要另一个数字。当我们得到这个数字"0.30000000000000004"时,结果比它的任何一个邻居都更接近于0.300000000004440892098500626616945267236328125。因此,"0.300000000004"是最短的十进制数字(忽略了前面的"0",这是出于审美目的),它唯一地区分了原始值可能是哪个值。
本规则来自ECMAScript 2017语言规范第7.1.12.1条第5步,这是将
Otherwise, let n, k, and s be integers such that k ≥ 1, 10k‐1 ≤ s < 10k, the Number value for s × 10n‐k is m, and k is as small as possible.
号
这里的措词有点不精确。我花了一段时间才知道,通过"s×10n-k的数值",标准是指