将数字格式化为两位小数

18

请给我一个原生的JavaScript函数(请不要使用jQuery,Prototype等库)用于将数字转换为下列格式:

input:  0.39, 2.5,  4.25, 5.5,  6.75, 7.75, 8.5
output: 0.39, 2.50, 4.25, 5.50, 6.75, 7.75, 8.50

例如,在Ruby中,我会像这样做:

>> sprintf("%.2f", 2.5)
=> "2.50"

输出可能是数字或字符串。我并不关心,因为我只是用它来设置 innerHTML

谢谢。


1
@T.J.Crowder,抱歉没有回复您的评论。感谢您指出并要求我澄清。我不记得我想要什么了,但让我们假设是5.52,因为这似乎是Number.prototype.toFixed()返回的结果,并且我接受它作为答案。 - ma11hew28
1
@T.J.Crowder,如果Stack Overflow有一个这样的徽章就好了。(一切都好。)谢谢!你也是,编码愉快! :-) - ma11hew28
可能是格式化数字始终显示2位小数的重复问题。 - ma11hew28
4个回答

33
input = 0.3;
output = input.toFixed(2);
// output: 0.30

一个较新的选择,支持四舍五入:
new Intl.NumberFormat('en-US', {
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
}).format(1.005)
// Outputs: 1.01

它在1.005或2.005上无法正常工作,它们的四舍五入有问题。(1.005).toFixed(2) == '1.00'和(2.005).toFixed(2) == '2.00'。应该分别是'1.01'和'2.01'。 - undefined
谢谢你的更新。事实上,在我的使用案例中,我也使用了Intl.NumberFormat函数。它会处理默认的四舍五入,并且你还可以从众多其他的舍入方法中选择。 - undefined

9

您可以在 Number 对象上使用 toFixed() 方法:

var array = [0.39, 2.5,  4.25, 5.5,  6.75, 7.75, 8.5], new_array = [];
for(var i = 0, j = array.length; i < j; i++) {
    if(typeof array[i] !== 'number') continue;
    new_array.push(array[i].toFixed(2));
}

4

使用toFixed函数,将小数点后保留2位。


它在1.005或2.005上无法正常工作,它们的四舍五入有误。(1.005).toFixed(2) == '1.00'和(2.005).toFixed(2) == '2.00'。应分别为'1.01'和'2.01'。 - undefined
OP没有提到舍入;舍入并不总是期望的结果,而且还有多种舍入方式。 - undefined
OP没有直接提到四舍五入,但通过写出“例如,在Ruby中,我会这样做:>> sprintf("%.2f", 2.5)”,间接地提到了。在Ruby中,sprintf函数默认会对数字进行类似于round函数的四舍五入操作。 - undefined

1

或者您可以使用Intl.NumberFormat(){ style: 'percent'}

var num = 25;

var option = {
  style: 'percent'

};
var formatter = new Intl.NumberFormat("en-US", option);
var percentFormat = formatter.format(num / 100);
console.log(percentFormat);


好的。谢谢。但是你的代码并不完全适用于我问题正文中的输入和输出。我刚刚编辑了问题标题以更好地匹配其正文。这样回答我的问题就可以使用 console.log(new Intl.NumberFormat('en-US', {minimumFractionDigits: 2}).format(2.5)) 了。 - ma11hew28

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