如何在javascript中对浮点数进行舍入?

我需要例如6.6886896.7 ,但它总是显示我7

我的方法:

 Math.round(6.688689); //or Math.round(6.688689, 1); //or Math.round(6.688689, 2); 

但结果总是相同的7 …我做错了什么?

 Number((6.688689).toFixed(1)); // 6.7 
 var number = 6.688689; var roundedNumber = Math.round(number * 10) / 10; 

使用toFixed()函数。

 (6.688689).toFixed(); // equal to 7 (6.688689).toFixed(1); // equal to 6.7 (6.688689).toFixed(2); // equal to 6.69 

您可以使用MDN示例中的帮助函数。 比你会有更多的灵活性:

 Math.round10(5.25, 0); // 5 Math.round10(5.25, -1); // 5.3 Math.round10(5.25, -2); // 5.25 Math.round10(5, 0); // 5 Math.round10(5, -1); // 5 Math.round10(5, -2); // 5 

见下文

var original = 28.59;

var result=Math.round(original*10)/10将返回返回28.6

希望这是你想要的..

如果你不仅想要使用toFixed()而且还要使用float ceil()floor() ,那么你可以使用下面的函数:

 function roundUsing(func, number, prec) { var tempnumber = number * Math.pow(10, prec); tempnumber = func(tempnumber); return tempnumber / Math.pow(10, prec); } 

生产:

 > roundUsing(Math.floor, 0.99999999, 3) 0.999 > roundUsing(Math.ceil, 0.1111111, 3) 0.112 

UPD:

另一种可能的方法是:

 Number.prototype.roundUsing = function(func, prec){ var temp = this * Math.pow(10, prec) temp = func(temp); return temp / Math.pow(10, prec) } 

生产:

 > 6.688689.roundUsing(Math.ceil, 1) 6.7 > 6.688689.roundUsing(Math.round, 1) 6.7 > 6.688689.roundUsing(Math.floor, 1) 6.6 
 > +(6.688687).toPrecision(2) 6.7 

JavaScript中的一个Number对象有一个方法,它完全符合你的需要。 该方法是Number.toPrecision([precision])

.toFixed(1)一样, .toFixed(1)结果转换为一个string,并且需要将其转换回数字。 在这里完成使用+前缀。

我的笔记本电脑简单的基准

 number = 25.645234 typeof number 50000000 x number.toFixed(1) = 25.6 typeof string / 17527ms 50000000 x +(number.toFixed(1)) = 25.6 typeof number / 23764ms 50000000 x number.toPrecision(3) = 25.6 typeof string / 10100ms 50000000 x +(number.toPrecision(3)) = 25.6 typeof number / 18492ms 50000000 x Math.round(number*10)/10 = 25.6 typeof number / 58ms string = 25.645234 typeof string 50000000 x Math.round(string*10)/10 = 25.6 typeof number / 7109ms 
 float(value,ndec); function float(num,x){ this.num=num; this.x=x; var p=Math.pow(10,x); return (Math.round((this.num).toFixed(this.x)*p))/p; } 

我认为这个function可以帮助。

  function round(value, ndec){ var n = 10; for(var i = 1; i < ndec; i++){ n *=10; } if(!ndec || ndec <= 0) return Math.round(value); else return Math.round(value * n) / n; } round(2.245, 2) //2.25 round(2.245, 0) //2 

我觉得下面的function可以帮助

 function roundOff(value,round) { return (parseInt(value * (10 ** (round + 1))) - parseInt(value * (10 ** round)) * 10) > 4 ? (((parseFloat(parseInt((value + parseFloat(1 / (10 ** round))) * (10 ** round))))) / (10 ** round)) : (parseFloat(parseInt(value * (10 ** round))) / ( 10 ** round)); } 

用法: roundOff(600.23458,2); 将返回600.23

如果你在node.js上下文,你可以尝试mathjs

 const math = require('mathjs') math.round(3.1415926, 2) // result: 3.14 

如果你今天使用Browserify,你将不得不尝试: roundTo一个非常有用的NPM库

我的扩展函数:

 function round(value, precision) { if (Number.isInteger(precision)) { var shift = Math.pow(10, precision); return Math.round(value * shift) / shift; } else { return Math.round(value); } } 

输出示例:

 round(123.688689) // 123 round(123.688689, 0) // 123 round(123.688689, 1) // 123.7 round(123.688689, 2) // 123.69 round(123.688689, -2) // 100