在JavaScript中,从浮点数转换为字符串时,小数点后仅能获得2位数字吗?例如,用0.34代替0.3445434。
如何格式化Javascript中的float?
所有这些使用乘法器的解决方案都存在问题。不幸的是,kyky和Christoph的解决方案都是错误的。
请测试您的代码551.175的两位小数位-它会四舍五入为551.17,而它应该是551.18!但是,如果您测试前。451.175可以-451.18。因此,乍一看很难发现此错误。
问题在于相乘:尝试551.175 * 100 = 55117.49999999999(ups!)
所以我的想法是在使用Math.round()之前,先用toFixed()处理它;
function roundFix(number, precision)
{
var multi = Math.pow(10, precision);
return Math.round( (number * multi).toFixed(precision + 1) ) / multi;
}
要注意的另一个问题是,toFixed()
在数字末尾可能会产生不必要的零。例如:
var x=(23-7.37)
x
15.629999999999999
x.toFixed(6)
"15.630000"
这个想法是使用以下命令清理输出RegExp
:
function humanize(x){
return x.toFixed(6).replace(/\.?0*$/,'');
}
该RegExp
尾随零(和可选小数点)匹配,以确保它看起来整数一样好。
humanize(23-7.37)
"15.63"
humanize(1200)
"1200"
humanize(1200.03)
"1200.03"
humanize(3/4)
"0.75"
humanize(4/3)
"1.333333"
var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding
The key here I guess is to round up correctly first, then you can convert it to String.
Now you can safely format this value with toFixed(p). So with your specific case: