我正在尝试将数字修复为小数点后的 2 位数字,为此我正在使用toFixedjavascript 函数。以下是我得到的奇怪结果,请检查并帮助我。
无功编号 = 11.995; number.toFixed(2); //给我 11.99 这是正确的 无功编号 = 19.995; number.toFixed(2); //给我 20.00 这是不正确的
谁能告诉我为什么会这样。
谢谢你的帮助。
这就是浮点数学的工作原理。值 19.995 不是精确的二进制(基数为 2)。为了更清楚,当你除以 10/3 时,请考虑一个确切的数字。
有关更深入的解释,请阅读:http : //docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
在您的情况下,您可以使用字符串来代替(至少看起来这就是您想要的):
number.toString().substr(0, n);
Run Code Online (Sandbox Code Playgroud)
或者定义一个这样的函数(2分钟完成,只是一个例子):
Number.toFixed = function(no, n) {
var spl = no.toString().split('.');
if ( spl.length > 1 ) {
return spl[0]+'.'+spl[1].substr(0,n);
}
return spl[0];
}
Number.toFixed(19.995, 2); // 19.99
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1568 次 |
| 最近记录: |