javascript中toFixed方法的精度不足

javascript中toFixed方法的精度不足,javascript,floating-point,tofixed,Javascript,Floating Point,Tofixed,我在chrome(v60.0.3112.101)控制台上做了一些关于Number.prototype.toFixed方法的测试,发现了一些让我困惑的东西 为什么1.15.toFixed(1)返回“1.1”而不是“1.2”? 为什么1.05.toFixed(1)返回“1.1”而不是“1.0”? 等等 我在大学里做研究 注1 toFixed返回一个字符串,该字符串包含此数值,该数值以十进制定点表示法表示,小数点后带有fractionDigits。如果未定义fractionDigits,则假定为0

我在chrome(v60.0.3112.101)控制台上做了一些关于
Number.prototype.toFixed
方法的测试,发现了一些让我困惑的东西

为什么
1.15.toFixed(1)
返回“1.1”而不是“1.2”?
为什么
1.05.toFixed(1)
返回“1.1”而不是“1.0”?
等等


我在大学里做研究

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

我知道答案是什么,但我无法解释上面的谜题。有人能解释清楚吗


顺便说一句,我认为在细节算法下应该改进。 比如说1.105,相关的算法如下:

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


根据
选择较大的n
,应该考虑111而不是110,这与现实相矛盾。

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

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

定点表示法与浮点表示法相反。浮点表示法在大多数情况下都能提供更好的精度。但它也更难理解和计算

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

如果您想写4.56,并且您得到了1/1000的比例因子,那么您的数字将由4560表示。事实上,4560*(1/1000)=4.56

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

将采用十进制,然后用定点表示法表示数字,因此它不关心“5”。你记忆中的号码是1100。这就是将数字四舍五入到最接近的次值的原因

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


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

参考规范没有提到任何舍入,还有其他方法可以舍入数字。为什么您希望此方法执行任何舍入?javascript中的舍入在舍入到1位小数时总是向上舍入
n.m5
。例如,在现实中,数字是使用双精度浮点()存储的,(1.15)。toExponential(20)给出“1.149999999991118e+0”-因此更接近“1.1”;(1.05).toExponential(20)给出了“1.0500000000000004441E+0”-它当然更接近于“1.1”@JaromandaX,但toFixed方法与简单的舍入不同。而
Math.round
method只将数字舍入到最接近的整数。@PageYe我使用的是
number#toExponent(20)
仅显示更接近实际存储的数字值的内容如何解释
1.05。toFixed(1)返回“1.1”,而不是“1.0”?
我刚刚测试了它。它返回“1.0”。也许这会影响到你的浏览方式。每个浏览器都有自己的JS解释器
1.15.toFixed(1)