我是不是遗漏了什么?

var someNumber = 123.456;
someNumber = someNumber.toFixed(2);
alert(typeof(someNumber));
//alerts string

为什么.toFixed()返回一个字符串?

我想把这个数四舍五入到两位十进制数字。


当前回答

我通过使用JavaScript的number()函数将其转换回数字来解决这个问题

var x = 2.2873424;
x = Number(x.toFixed(2));

其他回答

tofixed是一个用于在打印数字之前格式化数字的函数。它来自于toString, toExponential和torecision家族。

要四舍五入一个数字,你可以这样做:

someNumber = 42.008;
someNumber = Math.round( someNumber * 1e2 ) / 1e2;
someNumber === 42.01;

// if you need 3 digits, replace 1e2 with 1e3 etc.
// or just copypaste this function to your code:

function toFixedNumber(num, digits, base){
  var pow = Math.pow(base||10, digits);
  return Math.round(num*pow) / pow;
}

.

或者如果你想要一个“native-like”函数,你可以扩展原型:

Number.prototype.toFixedNumber = function(digits, base){
  var pow = Math.pow(base||10, digits);
  return Math.round(this*pow) / pow;
}
someNumber = 42.008;
someNumber = someNumber.toFixedNumber(2);
someNumber === 42.01;


//or even hexadecimal

someNumber = 0xAF309/256;  //which is af3.09
someNumber = someNumber.toFixedNumber(1, 16);
someNumber.toString(16) === "af3.1";

然而,请记住,当你在编写模块时,污染原型是不好的,因为模块不应该有任何副作用。因此,对于一个模块,使用第一个函数。

你应该像下面这样使用它。

var someNumber: number = 0.000000;
someNumber = Number(someNumber.toFixed(2))

我通过修改这个来解决这个问题:

someNumber = someNumber.toFixed(2)

...:

someNumber = +someNumber.toFixed(2);

然而,这会将数字转换为字符串并再次解析它,这将对性能产生重大影响。如果您关心性能或类型安全,也请检查其他答案。

当然它会返回一个字符串。如果要对数值变量进行四舍五入,则应该使用Math.round()。toFixed的目的是用固定的小数位数格式化数字,以便显示给用户。

您可以简单地使用“+”将结果转换为数字。

var x = 22.032423;
x = +x.toFixed(2); // x = 22.03