在JavaScript中,当从浮点数转换为字符串时,如何才能在小数点后得到2位数字?例如,0.34而不是0.3445434。
当前回答
有一些函数可以取整数字。例如:
var x = 5.0364342423;
print(x.toFixed(2));
将打印5.04。
编辑: 小提琴
其他回答
我使用这段代码来格式化浮动。它基于toPrecision(),但它去掉了不必要的零。我欢迎关于如何简化正则表达式的建议。
function round(x, n) {
var exp = Math.pow(10, n);
return Math.floor(x*exp + 0.5)/exp;
}
使用的例子:
function test(x, n, d) {
var rounded = rnd(x, d);
var result = rounded.toPrecision(n);
result = result.replace(/\.?0*$/, '');
result = result.replace(/\.?0*e/, 'e');
result = result.replace('e+', 'e');
return result;
}
document.write(test(1.2000e45, 3, 2) + '=' + '1.2e45' + '<br>');
document.write(test(1.2000e+45, 3, 2) + '=' + '1.2e45' + '<br>');
document.write(test(1.2340e45, 3, 2) + '=' + '1.23e45' + '<br>');
document.write(test(1.2350e45, 3, 2) + '=' + '1.24e45' + '<br>');
document.write(test(1.0000, 3, 2) + '=' + '1' + '<br>');
document.write(test(1.0100, 3, 2) + '=' + '1.01' + '<br>');
document.write(test(1.2340, 4, 2) + '=' + '1.23' + '<br>');
document.write(test(1.2350, 4, 2) + '=' + '1.24' + '<br>');
另一个需要注意的问题是,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"
如果你想要不带圆的字符串,你可以使用这个RegEx(可能不是最有效的方法…但是真的很简单)
(2.34567778).toString().match(/\d+\.\d{2}/)[0]
// '2.34'
var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding
我认为这里的关键是首先正确地舍入,然后您可以将其转换为String。
function roundOf(n, p) {
const n1 = n * Math.pow(10, p + 1);
const n2 = Math.floor(n1 / 10);
if (n1 >= (n2 * 10 + 5)) {
return (n2 + 1) / Math.pow(10, p);
}
return n2 / Math.pow(10, p);
}
// All edge cases listed in this thread
roundOf(95.345, 2); // 95.35
roundOf(95.344, 2); // 95.34
roundOf(5.0364342423, 2); // 5.04
roundOf(0.595, 2); // 0.60
roundOf(0.335, 2); // 0.34
roundOf(0.345, 2); // 0.35
roundOf(551.175, 2); // 551.18
roundOf(0.3445434, 2); // 0.34
现在可以使用toFixed(p)安全地格式化这个值。 在你的具体案例中
roundOf(0.3445434, 2).toFixed(2); // 0.34