我想显示一个数字到小数点后2位。
我认为我可以在JavaScript中使用toPrecision(2)。
toPrecision(2)
然而,如果数字是0.05,我得到0.0500。我宁愿它保持不变。
0.05
0.0500
在JSbin上见。
最好的方法是什么?
我可以想到编写一些解决方案,但我想象(我希望)像这样的东西是内置的?
你可以用toFixed函数来做,但它是IE中的bug。如果你想要一个可靠的解决方案,看看我的答案在这里。
toFixed
尝试toFixed而不是toPrecision。
toPrecision
float_num.toFixed(2);
如果需要,注意:toFixed()将四舍五入或填充零以满足指定的长度。
toFixed()
我不知道我是怎么想到这个问题的,但即使这个问题已经问了很多年了,我想补充一个我遵循的快速而简单的方法,它从来没有让我失望:
var num = response_from_a_function_or_something(); var fixedNum = parseFloat(num).toFixed( 2 );
函数整数(值,小数){ 返回数字(Math.round(价值+“e”+小数)+“e -”+小数); 代码}< / > < / p > 轮(1.005,2);//返回1.01 轮(1.004,2);//返回1而不是1.00 答案如下链接:http://www.jacklmoore.com/notes/rounding-in-javascript/
轮(1.005,2);//返回1.01 轮(1.004,2);//返回1而不是1.00
轮(1.005,2);//返回1.01
轮(1.004,2);//返回1而不是1.00
答案如下链接:http://www.jacklmoore.com/notes/rounding-in-javascript/
我做了这个函数。它工作正常,但返回字符串。
function show_float_val(val,upto = 2){ var val = parseFloat(val); return val.toFixed(upto); }
toFixed()方法使用定点表示法格式化数字。
这是语法
numObj.toFixed([digits])
数字参数为可选参数,默认值为0。返回类型是字符串而不是数字。但是你可以把它转换成数字
numObj.toFixed([digits]) * 1
它还可以抛出异常,如TypeError, RangeError
TypeError
RangeError
下面是浏览器中的完整的细节和兼容性。
number.parseFloat(2)可以工作,但它返回一个字符串。
number.parseFloat(2)
如果你想保留它作为一个数字类型,你可以使用:
Math.round(number * 100) / 100
你可以尝试混合Number()和toFixed()。
Number()
将目标数字转换为具有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>
let a = 0.0500 a.toFixed(2); //output 0.05
还有Intl API可以根据你的locale值格式化小数。这一点很重要,特别是如果小数分隔符不是点"但是一个逗号","相反,就像德国的情况一样。
Intl
Intl.NumberFormat('de-DE').formatToParts(0.05).reduce((acc, {value}) => acc += value, '');
注意,这将最多舍入到3位小数点后,就像上面默认情况下建议的round()函数一样。如果你想自定义行为来指定小数点后的位数,有最小和最大分数位数的选项:
round()
Intl.NumberFormat('de-DE', {minimumFractionDigits: 3}).formatToParts(0.05)
使用toFixed,你可以像这样设置小数点的长度:
let number = 6.1234 number.toFixed(2) // '6.12'
但是toFixed返回一个字符串,而且如果number根本没有小数点,它将添加多余的0。
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)));