toFixed()函数对浮点值的响应不同.例如:
var a = 2.555;
var b = 5.555;
console.log(a.toFixed(2)); /* output is 2.56 */
console.log(b.toFixed(2)); /* output is 5.55 */
Run Code Online (Sandbox Code Playgroud)
对于2.555/3.555,结果是(2.56/3.56)
和
对于其他值(不确定所有值),它显示#.55(#指任何数字)
我很困惑,任何人都可以帮助我.
提前致谢.
Javascript使用数字的二进制浮点表示(IEEE754).使用此表示法,可以精确表示的唯一号码的形式的n/2 米其中两个n和m是整数.
任何不合理的数字,其中分母是2的积分幂是不可能完全表示的,因为在二进制中它是一个周期数(它在点之后有无限的二进制数字).
数字0.5(即1/2)很好,(二进制只是0.1?),但是例如0.55(即11/20)不能精确表示(二进制,0.100011001100110011?…即0.10(0011)?最后一部分0011?重复无限次).
如果您需要进行任何结果取决于精确十进制数的计算,则需要使用精确的十进制表示.如果小数位数固定(例如3),则一个简单的解决方案是将所有值保持为整数乘以1000 ...
2.555 --> 2555
5.555 --> 5555
3.7 --> 3700
Run Code Online (Sandbox Code Playgroud)
并在相应地进行乘法和除法时调整计算(例如,在将两个数相乘后,需要将结果除以1000).
IEEE754双精度格式准确,整数高达9,007,199,254,740,992,这通常足以用于价格/值(舍入最常见的问题).