我想显示一个数字到小数点后2位。
我想我可以在JavaScript中使用toPrecision(2)。
但是,如果这个数字是0.05,我得到0.0500。我宁愿它保持不变。
在JSbin上可以看到。
最好的方法是什么?
我可以想到编写一些解决方案,但我想象(我希望)像这样的东西是内置的?
我想显示一个数字到小数点后2位。
我想我可以在JavaScript中使用toPrecision(2)。
但是,如果这个数字是0.05,我得到0.0500。我宁愿它保持不变。
在JSbin上可以看到。
最好的方法是什么?
我可以想到编写一些解决方案,但我想象(我希望)像这样的东西是内置的?
当前回答
试着固定而不是精确。
其他回答
函数舍入(值,小数){ 返回数字(Math.round(价值+“e”+小数)+“e -”+小数); }
轮(1.005,2);//返回1.01 轮(1.004,2);//返回1而不是1.00
答案就在这个链接上:http://www.jacklmoore.com/notes/rounding-in-javascript/
toFixed()方法使用定点表示法格式化数字。
这是语法
numObj.toFixed([digits])
参数Digits是可选的,默认为0。返回类型是字符串而不是数字。但是你可以把它转换成数字
numObj.toFixed([digits]) * 1
它也可以抛出异常,如TypeError, RangeError
这里是浏览器的完整细节和兼容性。
你可以用toFixed函数来做,但它在IE中有bug。如果你想要一个可靠的解决方案,看看我的答案。
你可以像这样设置小数点的长度:
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
还有一个Intl API可以根据你的locale值来格式化小数。这一点很重要,特别是当小数分隔符不是点"."而是逗号",",就像在德国的情况一样。
Intl.NumberFormat('de-DE').formatToParts(0.05).reduce((acc, {value}) => acc += value, '');
请注意,这将最多舍入到3位小数点后,就像上面默认情况下建议的round()函数一样。如果你想自定义行为来指定小数点后的位数,有最小和最大分数位数的选项:
Intl.NumberFormat('de-DE', {minimumFractionDigits: 3}).formatToParts(0.05)