如何在JavaScript中将数字格式化为两位小数?

6

我需要在JavaScript中将数字格式化为两个小数位。为了做到这一点,我使用toFixed方法,它可以正常工作。

但是,在没有任何小数位的情况下,它不应该显示小数点。

例如,10.00应该是10,而不是10.00。

2个回答

14

.toFixed()将结果转换为字符串
因此您需要将其转换回数字:

parseFloat( num.toFixed(2) )

或者只需使用一元+

+num.toFixed(2)

两者都会给出以下结果:

//   15.00   --->   15
//   15.20   --->   15.2

如果你只想去掉“.00”的情况,那么你可以使用字符串操作的 .replace() 方法。

num.toFixed(2).replace('.00', '');

注意:以上操作将把您的Number转换为String


使用 +(num.toFixed(2)) 更省事儿。;-) - RobG
但是这并没有完全满足要求,10 -> 10,10.111 -> 10.11,但是10.1 -> 10.1,如果格式为2位小数,我本来期望得到10.10?我认为应该像这样:num.toFixed(2).split('.00', 1) - Xotic750
@Xotic750 - 我同意,但是OP已经选择了它。你的意思不是 num.toFixed(2).split('.00')[0] 吗?还有一个方法是 num.toFixed(2).replace('.00','') - RobG
@RobG,它们也可以工作,这里是一个使用我的建议的jsFiddle。使用limit参数的split - Xotic750
1
@Xotic750 - split 返回一个数组,所以当通过 textContent 分配时,你依赖于 toString。它可以工作,但我认为明确选择成员更好。而且只会有一个 .00 - RobG
显示剩余5条评论

4
作为一种全局更改的替代方案(如果需要的话),请尝试以下操作:
var num1 = 10.1;
var num2 = 10;

var tofixed = Number.prototype.toFixed;

Number.prototype.toFixed = function(precision)
{
    var num = this.valueOf();

    if (num % 1 === 0)
    {
        num = Number(num + ".0");
    }

    return tofixed.call(num, precision);
}

console.log(num1.toFixed(2));
console.log(num2.toFixed(2));

Fiddle。这是这个这个帖子的混合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接