javascript中缺少toFixed方法的精度

时间:2017-08-23 02:46:40

标签: javascript floating-point tofixed

我在chrome(v60.0.3112.101)控制台中对Session.Clear方法进行了一些测试,发现某些问题让我很困惑。

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

我在fixed point notation进行研究。

  

注意1   toFixed返回一个String,其中包含以十进制定点符号表示的Number值,小数点后面的fractionDigits数字。如果fractionDigits未定义,则假定为0.

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

顺便说一下,我认为应该改进http://redux.js.org/docs/advanced/AsyncActions.html下的详细算术。 比如说1.105,相对算术如下:

  

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

根据1.05.toFixed(1),应该考虑111,而不是110,这与现实相矛盾。

1 个答案:

答案 0 :(得分:0)

我会尽力澄清这个问题的要点。首先是定点表示法:

  

我知道固定点符号是什么。但我无法解释清楚。

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

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

如果你想写4.56并得到1/1000比例因子,你的数字将由4560表示。的确,4560 *(1/1000)= 4.56

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

1.15.toFixed(1)

将采用小数,然后用定点表示法表示数字,因此它不关心' 5'。你在记忆中得到的数字是1100.这就是为什么数字四舍五入到最接近的低值。

现在您可以在toFixed函数的MDN Doc上看到,您可以保持最多20位小数。根据该信息,我们可以说缩放因子是1/10 ^ 20。

我希望能回答你的问题。