我是不是遗漏了什么?

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

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

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


当前回答

为什么不使用parseFloat呢?

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

其他回答

提供一个为什么它必须是字符串的例子:

如果你格式化1.toFixed(2),你会得到'1.00'。

这和1不一样,因为1没有两个小数。


我知道JavaScript并不是一种精确的性能语言,但如果你使用以下内容,你可能会获得更好的性能: roundedValue =数学。整数(值* 100)* 0.01

对于像我这样偶然遇到这个古老问题的人,一个现代的解决方案:

const roundValue = (num, decimals = 2) => {
    let scaling = 10 ** decimals;
    return Math.round((num + Number.EPSILON) * scaling) / scaling;
}

裁判:https://stackoverflow.com/a/11832950

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

为什么不使用parseFloat呢?

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

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

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