如何在 JavaScript 中舍入一个数字?

IT技术 javascript floating-point numbers rounding
2021-02-11 18:19:45

在做一个项目时,我遇到了一个由前员工创建的 JS 脚本,它基本上以以下形式创建了一个报告

Name : Value
Name2 : Value2

等等。

问题是这些值有时可以是浮点数(具有不同的精度)、整数,甚至是2.20011E+17. 我想输出的是纯整数。不过,我对 JavaScript 了解不多。我将如何编写一个接受这些有时浮点数并使它们成为整数的方法?

6个回答

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

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }
如果您使用的是 lodash,您可以使用lodash 的圆形功能_.round(number, precision)
2021-03-27 18:19:45
实际上,我认为@qwertz 建议的内容是您在 SO 上可以获得的最佳答案。
2021-04-04 18:19:45
请注意 toFixed() 输出一个字符串。(0.1 + 0.2).toFixed(2)产生字符串“0.30”。但是您可以通过在前面加上“+”来将其恢复为数字。+(0.1 + 0.2).toFixed(2)产生数字 0.3
2021-04-09 18:19:45
使用.toFixed()JavaScript 1.5 中添加的可能会更好
2021-04-10 18:19:45

您必须将您的输入转换为一个数字,然后将它们四舍五入:

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
相反,该Number函数使用与强制转换相同的算法来转换数字。该算法(在 ECMA-262 第 3 版的第 9.3.1 节中定义)处理多种格式。基本上任何可以是有效数字的东西,包括小数、指数符号和十六进制。(认真的'0xFF' == 255
2021-03-23 18:19:45
一个衬垫与 4 个衬垫完全相同:)
2021-04-07 18:19:45
@AaronAsAChimp我不能同意-如果字符串包含其他字符不是数字,.E+然后Math.round将返回NaN
2021-04-10 18:19:45
实际的单行是“Math.round(number)”。不需要整型铸造业务。在 JavaScript 中,字符串会在需要时自动强制转换为数字。
2021-04-12 18:19:45

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

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

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

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

PS:有没有第二个参数Math.round()方法。toFixed()不特定IE,其ECMAScript规范藏汉

很好的解释和我提供第二个论点的坏处;我将编辑我的答案以反映这一点。
2021-03-23 18:19:45
你只需要去规范=]
2021-04-06 18:19:45

这是一种能够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是位数。

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