我正在阅读the ECMAScript abstract operation ToString。在步骤5中( m 是我们要转换为字符串的数字):
- 否则,让 n , k 和 s 为整数,使 k ≥1,10^ ( k -1)≤ s < 10 ^ k , s 的数字值×10 ^( n - k )是 m , k 尽可能小。请注意, k 是 s 的十进制表示中的位数, s 不能被10整除,并且 s 的最低有效数字不一定由这些标准唯一确定。
醇>
我无法弄清楚在哪种情况下s的最低有效位不会被唯一确定。任何一个例子?
答案 0 :(得分:1)
答案是 - 与浮点数学一样 - 在可用精度的边缘进行舍入。
让我们来s = 7011750883285835
,k=16
和一些n
(让他们说n=0
)。现在确定m
,我们得到浮点数0x3FE67006BD248487(在0.70117508832858355…
附近)。但是,我们也可以选择s = 7011750883285836
,它也等于m
。
关键在于,如果我们将双精度转换为十进制表示,我们就会得到0.701175088328583551167128007364
。这比必要的时间长得多(并且意味着比可用的精度更高),因此ToString
算法指定使用最少量的重要数字来生成m
的十进制表示(" k
尽可能小")仍然会解析为我们想要的数字m
。有时,我们可以向上或向下舍入以获得该结果,并且允许两种方式。