我想格式化我的数字,总是显示2小数点后,四舍五入适用的地方。
例子:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在用这个:
parseFloat(num).toFixed(2);
但是它把1显示为1,而不是1.00。
我想格式化我的数字,总是显示2小数点后,四舍五入适用的地方。
例子:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在用这个:
parseFloat(num).toFixed(2);
但是它把1显示为1,而不是1.00。
当前回答
我建议你用
new Intl.NumberFormat('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(num)
这样,您还将拥有指定国家的本地格式,并且它将确保显示精确的2个小数(无论num是1还是1.12345,它将分别显示1.00和1.12)
在这个例子中,我使用德语本地化,因为我想我的数字显示与千分隔符,所以这将是一些输出:
1 => 1,00
1.12 => 1,12
1.1234 => 1,12
1234 => 1.234,00
1234.1234 => 1.234,12
其他回答
如果你已经在使用jQuery,你可以看看如何使用jQuery数字格式插件。
该插件可以返回格式化的数字作为字符串,你可以设置小数,和千位分隔符,你可以选择显示的小数的数量。
$.number( 123, 2 ); // Returns '123.00'
你也可以从GitHub获得jQuery数字格式。
在需要特定格式的地方,您应该编写自己的例程或使用库函数来完成所需的工作。基本的ECMAScript功能通常不足以显示格式化的数字。
关于舍入和格式的详细解释在这里:http://www.merlyn.demon.co.uk/js-round.htm#RiJ
作为一般规则,舍入和格式化应仅作为输出前的最后一步执行。过早地这样做可能会引入意想不到的大错误并破坏格式。
这里有另一个只使用底价的四舍五入的解决方案,这意味着,确保计算的金额不会大于原始金额(有时交易需要):
Math.floor(num* 100 )/100;
function formatValeurDecimal(valeurAFormate,longueurPartieEntier,longueurPartieDecimal){
valeurAFormate = valeurAFormate.replace(",",".")
valeurAFormate = parseFloat(valeurAFormate).toFixed(longueurPartieDecimal)
if(valeurAFormate == 'NaN'){
return 0
}
//____________________valeurPartieEntier__________________________________
var valeurPartieEntier = valeurAFormate | 0
var strValeur = valeurPartieEntier.toString()
strValeur = strValeur.substring(0, longueurPartieEntier)
valeurPartieEntier = strValeur
//____________________valeurPartieDecimal__________________________________
strValeur = valeurAFormate
strValeur = strValeur.substring(strValeur.indexOf('.')+1)
var valeurPartieDecimal = strValeur
valeurAFormate = valeurPartieEntier +'.'+valeurPartieDecimal
if(valeurAFormate == null){
valeurAFormate = 0
}
return valeurAFormate
}
(num + "").replace(/^([0-9]*)(\.[0-9]{1,2})?.*$/,"$1$2")