javaScript使用toFixed舍入小数
在JavaScript中使用toFixed将小数舍入时,我面临一个问题javaScript使用toFixed舍入小数,javascript,math,rounding,tofixed,Javascript,Math,Rounding,Tofixed,在JavaScript中使用toFixed将小数舍入时,我面临一个问题 const num1 = (100.555).toFixed(2) // "100.56" const num2 = (10.555).toFixed(2) // "10.55" 有人能解释为什么会发生这种行为吗?为什么第一个例子将小数点舍入为56,而第二个例子将小数点舍入为55 更新: 如果我加4个小数,那么四舍五入是不同的 const num3 = (10.5555).toFixed(2) // "10.56" 这会
const num1 = (100.555).toFixed(2) // "100.56"
const num2 = (10.555).toFixed(2) // "10.55"
有人能解释为什么会发生这种行为吗?为什么第一个例子将小数点舍入为56,而第二个例子将小数点舍入为55
更新:
如果我加4个小数,那么四舍五入是不同的
const num3 = (10.5555).toFixed(2) // "10.56"
这会解决你的问题
//这是一个舍入错误,可以用十进制表示法精确地表示数字。
Number.prototype.toFixedDown=函数(位数){
var re=new RegExp(“(\\d+\.\\d{”+digits+“})(\\d)”),
m=此.toString()匹配(re);
返回m?parseFloat(m[1]):this.valueOf();
};
常数num1=100.555.toFixedDown(2)
常量num2=(10.555).固定值(2)
警报(num1+“”+num2)代码>这是因为浮点数的精度问题……您可以找到npm之类的精度计算库
“npm安装bigdecimal”
链接此处:
你可以这样使用它,它应该很好
希望这能澄清你的问题……和平这能回答你的问题吗?浮点数不能准确表示所有十进制数。通过在小数点后选择一个5
,您可以很容易地找到实际上略小于预期值的值,因此向下舍入。
var x = new bigdecimal.BigDecimal("123456.123456789012345678901234567890");