我是不是遗漏了什么?

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

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

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


当前回答

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

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

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

其他回答

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

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

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

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

someNumber = someNumber.toFixed(2)

...:

someNumber = +someNumber.toFixed(2);

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

可能来不及回答,但您可以将输出与1相乘以再次转换为数字,这里是一个例子。

Const x1 = 1211.1212121; const x2 = x1.toFixed(2)*1; console.log (typeof (x2));

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

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