在处理项目时,我遇到了一个由前员工创建的JS脚本,该脚本基本上以
的形式创建报告Name : Value
Name2 : Value2
等
问题是值有时可能是浮点数(具有不同的精度),整数,甚至是2.20011E+17
形式。我想输出的是纯整数。不过,我不太了解很多JavaScript。我如何编写一个有时采用浮点数并使它们成为整数的方法?
答案 0 :(得分:103)
如果您需要舍入到一定数量的数字,请使用以下函数
function roundNumber(number, digits) {
var multiple = Math.pow(10, digits);
var rndedNum = Math.round(number * multiple) / multiple;
return rndedNum;
}
答案 1 :(得分:51)
您必须将输入转换为数字,然后将其舍入:
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
答案 2 :(得分:30)
根据ECMAScript specification,JavaScript中的数字仅由双精度64位格式IEEE 754表示。因此JavaScript中没有真正的整数类型。
关于这些数字的四舍五入,您可以通过多种方式实现这一目标。 Math对象为我们提供了三种可以使用的舍入方法:
Math.round()是最常用的,它返回舍入到最接近整数的值。然后有Math.floor(),它返回小于或等于数字的最大整数。最后,我们有Math.ceil()函数返回大于或等于数字的最小整数。
还有toFixed()使用定点表示法返回表示数字的字符串。
Ps。: Math.round()方法中有无第二个参数。 toFixed() 不是特定于IE的,其within是ECMAScript规范以及
答案 3 :(得分: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
答案 4 :(得分:20)
您还可以使用toFixed(x)
或toPrecision(x)
,其中 x 是位数。
所有主流浏览器都支持这两种方法
答案 5 :(得分:16)
您可以使用Math.round()将数字四舍五入到最接近的整数。
Math.round(532.24) => 532
此外,您可以使用parseInt()和parseFloat()将变量强制转换为某种类型,在本例中为整数和浮点。
答案 6 :(得分: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;
}
仅在某些情况下,当数字的小数部分长度很长时才会出错。
答案 7 :(得分:-1)
Math.floor(19.5)= 19也应该有用。