我是不是遗漏了什么?

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

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

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


当前回答

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

其他回答

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

当它格式化一个数字时,你期望它返回什么?如果你有一个数字,你几乎不能对它做任何事情,因为例如2 == 2.0 == 2.00等,所以它必须是一个字符串。

因为它的主要用途是显示数字?如果要对数字进行四舍五入,请使用带有适当因子的Math.round()。

小心使用toFixed()和Math.round(),由于浮点数系统,它们可能会产生意想不到的结果:

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

console.log(toFixedNumber(130.795, 2, 10));
// 130.79 (incorrect)
console.log(toFixedNumber(100.795, 2, 10));
// 100.8 

console.log(+130.795.toFixed(2));
// 130.79 (incorrect)
console.log(+100.795.toFixed(2));
// 100.8

我建议使用Lodash的_.round()函数:https://lodash.com/docs/4.17.15#round

_.round(130.795, 2);
// 130.8

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

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