【发布时间】:2011-03-10 22:27:45
【问题描述】:
我想将一个数字显示到小数点后 2 位。
我想我可以在 JavaScript 中使用toPrecision(2)。
但是,如果号码是0.05,我会得到0.0500。我宁愿它保持不变。
在JSbin 上查看。
最好的方法是什么?
我可以考虑编写一些解决方案,但我想(我希望)这样的东西是内置的?
【问题讨论】:
标签: javascript floating-point precision
我想将一个数字显示到小数点后 2 位。
我想我可以在 JavaScript 中使用toPrecision(2)。
但是,如果号码是0.05,我会得到0.0500。我宁愿它保持不变。
在JSbin 上查看。
最好的方法是什么?
我可以考虑编写一些解决方案,但我想(我希望)这样的东西是内置的?
【问题讨论】:
标签: javascript floating-point precision
float_num.toFixed(2);
注意:toFixed() 将在必要时用零进行舍入或填充以满足指定的长度。
【讨论】:
您可以使用toFixed 函数来实现,但它是buggy in IE。如果您想要一个可靠的解决方案,请查看我的答案here。
【讨论】:
float_num.toFixed(2); 工作正常)
不知道我是怎么得到这个问题的,但即使这个问题已经问了很多年了,我想添加一个我遵循的快速简单的方法,它从未让我失望:
var num = response_from_a_function_or_something();
var fixedNum = parseFloat(num).toFixed( 2 );
【讨论】:
parseFloat()?仅当数字来自字符串时才应使用它。
number.parseFloat(2) 有效,但它返回一个字符串。
如果您想将其保留为数字类型,您可以使用:
Math.round(number * 100) / 100
【讨论】:
尝试toFixed 而不是toPrecision。
【讨论】:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
圆形(1.005, 2); // 返回 1.01
圆形(1.004, 2); // 返回 1 而不是 1.00
答案如下:http://www.jacklmoore.com/notes/rounding-in-javascript/
【讨论】:
您可以尝试混合使用Number() 和toFixed()。
将您的目标数字转换为带有 X 位数字的漂亮字符串,然后将格式化的字符串转换为数字。
Number( (myVar).toFixed(2) )
请看下面的例子:
var myNumber = 5.01;
var multiplier = 5;
$('#actionButton').on('click', function() {
$('#message').text( myNumber * multiplier );
});
$('#actionButton2').on('click', function() {
$('#message').text( Number( (myNumber * multiplier).toFixed(2) ) );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<button id="actionButton">Weird numbers</button>
<button id="actionButton2">Nice numbers</button>
<div id="message"></div>
【讨论】:
toFixed()方法使用定点表示法格式化数字。
这里是语法
numObj.toFixed([digits])
digits 参数是可选的,默认为 0。返回类型是字符串而不是数字。但是您可以使用
将其转换为数字numObj.toFixed([digits]) * 1
也可以抛出TypeError、RangeError等异常
这里是full detail 和浏览器中的兼容性。
【讨论】:
let a = 0.0500
a.toFixed(2);
//output
0.05
【讨论】:
"0.05"(在Chrome开发工具中运行),这不是一回事
使用toFixed,您可以像这样设置小数点的长度:
let number = 6.1234
number.toFixed(2) // '6.12'
但是toFixed 返回一个字符串,而且如果number 根本没有小数点,它会添加多余的零。
let number = 6
number.toFixed(2) // '6.00'
为避免这种情况,您必须将结果转换为数字。您可以通过以下两种方法做到这一点:
let number1 = 6
let number2 = 6.1234
// method 1
parseFloat(number1.toFixed(2)) // 6
parseFloat(number2.toFixed(2)) // 6.12
// method 2
+number1.toFixed(2) // 6
+number2.toFixed(2) // 6.12
【讨论】:
如果您需要 2 位数字而不是字符串类型,我使用这种方式。
const exFloat = 3.14159265359;
console.log(parseFloat(exFloat.toFixed(2)));
【讨论】:
还有Intl API 可以根据您的语言环境值格式化小数。如果小数点分隔符不是点“。”,这一点尤其重要。而是一个逗号“,”,就像在德国一样。
Intl.NumberFormat('de-DE').formatToParts(0.05).reduce((acc, {value}) => acc += value, '');
请注意,这将四舍五入到最多 3 位小数,就像上面在默认情况下建议的 round() 函数一样。如果您想自定义该行为以指定小数位数,则可以选择最小和最大小数位数:
Intl.NumberFormat('de-DE', {minimumFractionDigits: 3}).formatToParts(0.05)
【讨论】:
我已经做了这个功能。它工作正常,但返回字符串。
function show_float_val(val,upto = 2){
var val = parseFloat(val);
return val.toFixed(upto);
}
【讨论】: