如何在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也应该工作。