3

我对Number.prototype.toFixedchrome(v60.0.3112.101) 控制台中的方法做了一些测试,发现某事让我很困惑。

为什么1.15.toFixed(1)返回“1.1”而不返回“1.2”?
为什么1.05.toFixed(1)返回“1.1”而不返回“1.0”?
等等... 在 chrome 控制台上测试


我在ECMAScript 规范中进行研究。

注 1 toFixed 返回一个字符串,其中包含以十进制定点表示法 表示的此 Number 值,小数点后有 fractionDigits 位。如果 fractionDigits 未定义,则假定为 0。

我知道什么是定点符号。但我无法解释上面的谜题。有人可以给出明确的解释吗?


顺便说一句,我认为应该改进规范下的细节算法。以 1.105 为例,相对算术如下:

令 n 为一个整数,其中 n ÷ 10^f - x 的精确数学值尽可能接近于零。如果有两个这样的 n,则选择较大的 n。

pick the larger n,应考虑 111 而不是考虑 110,这与现实相矛盾。

4

1 回答 1

0

我会尽力澄清围绕这个问题的观点。首先是定点符号:

我知道什么是定点符号。但我不能很好地解释它。

定点表示法与浮点表示法相反。大多数情况下,浮点表示法允许更好的精度。但它也更难理解和计算。

好吧,让我们回到定点符号。这也是实数的算术符号。不同之处在于定点表示法中的数字由具有比例因子的整数表示。例如 :

如果你想写 4.56 并且你有一个 1/1000 的比例因子,你的数字将由 4560 表示。实际上,4560 * (1/1000) = 4.56

现在我们知道了定点符号是如何工作的,我们可以更好地理解toFixed(n)函数的结果。例如,假设比例因子为 1/1000(这不是实际值,但这更容易可视化结果)。

1.15.toFixed(1)

将采用十进制,然后用定点符号表示数字,因此它不关心“5”。你在内存中得到的数字是 1100。这就是为什么这个数字被四舍五入到最接近的劣值。

现在,正如您在MDN Doc of toFixedfunction 中看到的那样,您最多可以保留 20 位小数。根据这些信息,我们可以说比例因子是 1/10^20。

我希望这能回答你的问题。

于 2017-08-23T07:50:11.183 回答