始终显示至少两位小数

18

我希望格式化一个数字,使其始终至少有两位小数。

示例:

1
2.1
123.456
234.45

输出:

1.00
2.10
123.456
234.45

请查看http://numeraljs.com/。 - adamb
3
@DavidBarker 您链接的问题无论有多少位小数,都会保留2位小数,这不是提问者所要求的。 - Patsy Issa
你可以把这个问题看作是一个回答:https://dev59.com/4HNA5IYBdhLWcg3wKacx - Bura Chuhadar
4个回答

21

您可以将其修复为2或当前场所的计数。

 var result = num.toFixed(Math.max(2, (num.toString().split('.')[1] || []).length));

12

试试使用 Intl

Intl.NumberFormat(navigator.language, {
  minimumFractionDigits: 2,
  maximumFractionDigits: 10,
}).format(num)

0

试试这个:

var num = 1.2;
function decimalPlaces(num) {
  var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
  if (!match) { return 0; }
  return Math.max(
       0,
       // Number of digits right of decimal point.
       (match[1] ? match[1].length : 0)
       // Adjust for scientific notation.
       - (match[2] ? +match[2] : 0));
}
if(decimalPlaces(num) < 2){
   num = num.toFixed(2);
}
alert(num);

这里是 jsfiddle


1
输出是 1.23,我想要 1.2345 - skmasq
请再试一次!对我的错误感到抱歉。 - Ringo

0

尝试这个解决方案(可行),

var a= 1,
    b= 2.1,
    c = 123.456,
    d = 234.45;

console.log(a.toFixed(4).replace(/0{0,2}$/, ""));
console.log(b.toFixed(4).replace(/0{0,2}$/, ""));
console.log(c.toFixed(4).replace(/0{0,2}$/, ""));
console.log(d.toFixed(4).replace(/0{0,2}$/, ""));

如果你有更多的小数位数,你可以轻松地更新这个数字。

这是最多4位小数,这并不能解决问题。 - skmasq
请查看答案中的最后一行。您可以更改此处的小数位数,例如:c.toFixed(10).replace(/0{0,8}$/, "")第一个数字是我们可以拥有的最大小数位数(在本例中为10),第二个数字是最大-最小值(在本例中为8)。 - Sajad Deyargaroo
2
Alex K. 的答案更好,因为它不设置最大小数位数。 - skmasq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接