在处理项目时,我遇到了一个由前员工创建的JS脚本,该脚本基本上以

的形式创建报告
Name : Value
Name2 : Value2

问题是这些值有时可能是浮点数(具有不同的精度),整数,甚至是 2.20011E + 17 形式。我想输出的是纯整数。不过,我不太了解很多JavaScript。我如何编写一个有时采用浮点数并使它们成为整数的方法?

有帮助吗?

解决方案

您需要将输入转换为数字然后围绕它们:

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

其他提示

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

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中没有真正的整数类型。

关于这些数字的四舍五入,您可以通过多种方式实现这一目标。 数学对象为我们提供了三种可以使用的舍入方法:

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

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

Ps。: Math.round()方法中有无第二个参数 toFixed() 不是特定于IE的,其以及

这是一种方法,可以使用 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 是位数。

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

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

Math.round(532.24) => 532

此外,您可以使用 parseInt() parseFloat()将变量强制转换为某种类型,在本例中为整数和浮点。

舍入的非常好的近似值:

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也应该有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top