如何在javascript中对浮点数进行舍入?
我需要例如6.688689
到6.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