Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaScript使用toFixed舍入小数_Javascript_Math_Rounding_Tofixed - Fatal编程技术网

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" 这会

在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"

这会解决你的问题

//这是一个舍入错误,可以用十进制表示法精确地表示数字。
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");