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

我想我可以在JavaScript中使用toPrecision(2)。

但是,如果这个数字是0.05,我得到0.0500。我宁愿它保持不变。

在JSbin上可以看到。

最好的方法是什么?

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


当前回答

你可以像这样设置小数点的长度:

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)

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

试着固定而不是精确。

您可以尝试混合使用Number()和toFixed()。

将目标数字转换为具有X位数字的漂亮字符串,然后将格式化后的字符串转换为数字。

(myVar).toFixed(2))


请看下面的例子:

var myNumber = 5.01; 变量乘数 = 5; $('#actionButton').on('click', function() { $('#message').text( myNumber * 乘数 ); }); $('#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> <按钮 id=“动作按钮”>奇怪的数字</button> <按钮 id=“动作按钮2”>不错的数字</button> <div id=“message”></div>

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

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