toFixed功能不正常(请给出一个不能替代的理由)

PHP*_*... 0 javascript math

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(#指任何数字)

我很困惑,任何人都可以帮助我.

提前致谢.

650*_*502 5

Javascript使用数字的二进制浮点表示(IEEE754).使用此表示法,可以精确表示的唯一号码的形式的n/2 其中两个nm是整数.

任何不合理的数字,其中分母是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,这通常足以用于价格/值(舍入最常见的问题).