我在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,这与现实相矛盾。
答案 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。
我希望能回答你的问题。