我想要将数字格式化为始终显示两位小数,必要时要四舍五入。
例如:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在使用这个:
parseFloat(num).toFixed(2);
但它显示的是1
,而不是1.00
。
我想要将数字格式化为始终显示两位小数,必要时要四舍五入。
例如:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在使用这个:
parseFloat(num).toFixed(2);
但它显示的是1
,而不是1.00
。
(Math.round(num * 100) / 100).toFixed(2);
演示
var num1 = "1";
document.getElementById('num1').innerHTML = (Math.round(num1 * 100) / 100).toFixed(2);
var num2 = "1.341";
document.getElementById('num2').innerHTML = (Math.round(num2 * 100) / 100).toFixed(2);
var num3 = "1.345";
document.getElementById('num3').innerHTML = (Math.round(num3 * 100) / 100).toFixed(2);
span {
border: 1px solid #000;
margin: 5px;
padding: 5px;
}
<span id="num1"></span>
<span id="num2"></span>
<span id="num3"></span>
请注意它将会 四舍五入 到小数点后2位,所以输入的1.346
将返回 1.35
。
1
显示为1.00
,将数字1.341
显示为1.34
。 - drudgeNumber(1).toFixed(2); // 1.00
Number(1.341).toFixed(2); // 1.34
Number(1.345).toFixed(2); // 1.34 NOTE: See andy's comment below.
Number(1.3450001).toFixed(2); // 1.35
document.getElementById('line1').innerHTML = Number(1).toFixed(2);
document.getElementById('line2').innerHTML = Number(1.341).toFixed(2);
document.getElementById('line3').innerHTML = Number(1.345).toFixed(2);
document.getElementById('line4').innerHTML = Number(1.3450001).toFixed(2);
<span id="line1"></span>
<br/>
<span id="line2"></span>
<br/>
<span id="line3"></span>
<br/>
<span id="line4"></span>
Number(1.345).toFixed(2)
中返回了1.34
。 - Drew Noakes1.345
是一个不能被精确存储在浮点数中的数字,所以我认为它不能像你预期的那样四舍五入,实际上它存储的数字略小于1.345
并且会向下取整。如果你测试(1.34500001).toFixed(2)
,你就会看到它正确地四舍五入为1.35
。 - andy这个答案在value = 1.005
时会失败。
更好的解决方法是使用指数表示法来避免舍入问题:
Number(Math.round(1.005+'e2')+'e-2'); // 1.01
按照@Kon和原作者的建议,进行了更清晰的代码编写:
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
您可以在末尾添加 toFixed()
以保留小数点,例如:1.00
,但请注意它将返回字符串。
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces).toFixed(decimalPlaces)
toFixed
存在舍入问题。你的回答应该被接受。 - ArmfootNumber(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
。 - Kon对于现代浏览器,请使用toLocaleString
:
var num = 1.345;
num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
将区域标签作为第一个参数指定以控制十进制分隔符。例如,要使用小数点,请使用英语美国区域设置:
num.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
这样处理:
1,35
欧洲大多数国家使用逗号作为小数点分隔符,因此如果您使用瑞典语/瑞典本地设置,就会出现上述情况。
num.toLocaleString("sv-SE", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
它将返回:
1,35
我建议你使用
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
var num = new Number(14.12);
console.log(num.toPrecision(2)); //outputs 14
console.log(num.toPrecision(3)); //outputs 14.1
console.log(num.toPrecision(4)); //outputs 14.12
console.log(num.toPrecision(5)); //outputs 14.120
toPrecision
只是将数字格式化为特定的小数位数,会简单地省略多余的小数位,但不会对其进行舍入。当然,这也可能非常有用,但重要的是要理解两者之间的区别。 - BoaztoFixed
后将其转换为数字或浮点数:const formattedVal = Number(val.toFixed(2));
不要使用 toPrecision
,因为它在使用精度参数时会计算非小数位数。 - James L.为了获得最准确的舍入结果,请创建以下函数并将其用于保留两位小数:
function round(value, decimals) {
return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals).toFixed(decimals);
}
console.log("seeked to " + round(1.005, 2));
> 1.01
感谢 Razu、这篇文章 以及MDN 的 Math.round 参考资料。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
var number = 123456.789;
console.log(new Intl.NumberFormat('en-IN', {
maximumFractionDigits: 2
}).format(number));
minimumFractionDigits
选项,而不是maximum
。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#minimumfractiondigits - Jayjavascript:alert(parseFloat(1).toFixed(2))
粘贴到浏览器地址栏中时,它显示为1.00。
但是,如果之后对其进行操作,它将恢复原样。alert(parseFloat(1).toFixed(2))
var num = 2
document.getElementById('spanId').innerHTML = (parseFloat(num).toFixed(2) - 1)
<span id="spanId"></span>
shows 1 and not 1.00
toFixed
。 - Felix KlingtoFixed
确实会进行四舍五入。 - Stijn de Witt