JavaScript显示一个浮点数到小数点后2位

我想显示一个数字到小数点后2位。

我认为我可以在JavaScript中使用toPrecision(2)

然而,如果数字是0.05,我得到0.0500。我宁愿它保持不变。

JSbin上见。

最好的方法是什么?

我可以想到编写一些解决方案,但我想象(我希望)像这样的东西是内置的?

540902 次浏览

你可以用toFixed函数来做,但它是IE中的bug。如果你想要一个可靠的解决方案,看看我的答案在这里

尝试toFixed而不是toPrecision

float_num.toFixed(2);

如果需要,注意: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/

我做了这个函数。它工作正常,但返回字符串。

function show_float_val(val,upto = 2){
var val = parseFloat(val);
return val.toFixed(upto);
}

toFixed()方法使用定点表示法格式化数字。

这是语法

numObj.toFixed([digits])

数字参数为可选参数,默认值为0。返回类型是字符串而不是数字。但是你可以把它转换成数字

numObj.toFixed([digits]) * 1

它还可以抛出异常,如TypeErrorRangeError

下面是浏览器中的完整的细节和兼容性。

number.parseFloat(2)可以工作,但它返回一个字符串。

如果你想保留它作为一个数字类型,你可以使用:

Math.round(number * 100) / 100

你可以尝试混合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>

let a = 0.0500
a.toFixed(2);


//output
0.05

还有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)

使用toFixed,你可以像这样设置小数点的长度:

let number = 6.1234
number.toFixed(2) // '6.12'

但是toFixed返回一个字符串,而且如果number根本没有小数点,它将添加多余的0。

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)));