如何在 JavaScript 中对数字进行四舍五入?

问题描述 投票:0回答:9

在从事一个项目时,我遇到了一位前员工创建的 JS 脚本,该脚本基本上以以下形式创建报告:

Name : Value
Name2 : Value2

等等

问题在于,这些值有时可以是浮点数(具有不同的精度)、整数,甚至是

2.20011E+17
的形式。我想要输出的是纯整数。不过,我对 JavaScript 了解不多。 我将如何编写一个方法来获取这些有时浮点数并使它们成为整数?

javascript floating-point numbers rounding
9个回答
103
投票

如果您需要四舍五入到一定位数,请使用以下函数

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

52
投票

您必须将输入转换为数字,然后四舍五入:

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

或者作为单衬:

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

使用不同值进行测试:

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

30
投票

根据 ECMAScript 规范,JavaScript 中的数字仅由双精度 64 位格式 IEEE 754 表示。因此 JavaScript 中并不存在真正的整数类型。

关于这些数字的四舍五入,有多种方法可以实现这一点。 Math 对象为我们提供了三种可以使用的舍入方法:

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

还有

toFixed(),它返回一个使用定点表示法表示数字的字符串。

Ps.:

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


25
投票
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



20
投票
toFixed(x)

toPrecision(x)
,其中
x
是位数。 所有主流浏览器都支持这两种方法


16
投票
Math.round()

将数字四舍五入到最接近的整数。 Math.round(532.24) => 532

此外,您还可以使用 
parseInt()

parseFloat() 将变量转换为某种类型,在本例中为整数和浮点数。


0
投票

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; }

只有在某些情况下数字的小数部分长度很长时才会不正确。


0
投票
value.toFixed(n)

功能。

它将值四舍五入到下一个带有“n”位小数的值。


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.