如何在JavaScript中舍入数字?

在一个项目上工作的时候,我碰到了一个由前员工创build的JS脚本,它基本上以。的forms创build了一个报告

Name : Value Name2 : Value2 

等等

这个标志是这个值有时候可能是漂浮的(不同的精度),整数,甚至是2.20011E+17的forms。 我想要输出的是纯粹的整数。 不过,我不太了解JavaScript。 我将如何去写一个方法,使这些有时浮动,使他们整数?

你需要把你的input转换成一个数字,然后四舍五入:

 function toInteger(number){ return Math.round( // round to nearest integer Number(number) // type cast your input ); }; 

或者作为一个class轮:

 function toInt(n){ return Math.round(Number(n)); }; 

testing不同的值:

 toInteger(2.5); // 3 toInteger(1000); // 1000 toInteger("12345.12345"); // 12345 toInteger("2.20011E+17"); // 220011000000000000 

如果您需要四舍五入到一定数量的数字,请使用以下function

 function roundNumber(number, digits) { var multiple = Math.pow(10, digits); var rndedNum = Math.round(number * multiple) / multiple; return rndedNum; } 

根据ECMAScript规范 ,JavaScript中的数字仅由双精度64位格式IEEE 754表示。因此,JavaScript中并没有真正的整数types。

关于这些数字的四舍五入,有很多方法可以做到这一点。 math对象给我们三个舍入方法,我们可以使用:

Math.round()是最常用的,它返回四舍五入到最接近的整数值。 然后是Math.floor()返回小于或等于数字的最大整数。 最后,我们有Math.ceil()函数返回大于或等于数字的最小整数。

还有toFixed()返回一个string表示使用定点符号的数字。

Ps .: Math.round()方法中没有第二个参数toFixed() 不是特定IE的 ,它也在 ECMAScript规范中

这里有一种方法可以使用Math.round()和第二个参数(舍入小数):

 // 'improve' Math.round() to support a second argument var _round = Math.round; Math.round = function(number, decimals /* optional, default 0 */) { if (arguments.length == 1) return _round(number); var multiplier = Math.pow(10, decimals); return _round(number * multiplier) / multiplier; } // examples Math.round('123.4567', 2); // => 123.46 Math.round('123.4567'); // => 123 

您也可以使用toFixed(x)toPrecision(x) ,其中x是数字的位数。

所有主stream浏览器都支持这两种方法

您可以使用Math.round()将数字四舍五入到最接近的整数。

 Math.round(532.24) => 532 

另外,可以使用parseInt()和parseFloat()将variables转换为某种types,在这种情况下是整型和浮点型。

舍入的一个非常好的近似值:

 function Rounding (number, precision){ var newNumber; var sNumber = number.toString(); var increase = precision + sNumber.length - sNumber.indexOf('.') + 1; if (number < 0) newNumber = (number - 5 * Math.pow(10,-increase)); else newNumber = (number + 5 * Math.pow(10,-increase)); var multiple = Math.pow(10,precision); return Math.round(newNumber * multiple)/multiple; } 

只有在某些情况下,当数字的小数部分的长度很长时才会出错。

Math.floor(19.5)= 19也应该工作。

Interesting Posts