数字值格式,带逗号和两个小数点

时间:2018-09-02 23:30:29

标签: javascript chart.js number-formatting

我正在使用chart.js来显示我的销售额,问题是我无法将数据正确地转换为带有逗号和两位小数的数字格式。

当数据为整数时,输出正确。但是,当我显示平均销售额时,会得到类似

的输出
  

平均销售额(无格式)1000.2017
  平均销售(含格式)1,000.2,017
  总销售(无格式)1000
  总销售(含格式)1,000

如何在javascript中正确格式化输出?

tooltips: {
  callbacks: {
     label: function(tooltipItem, data) {
         var value = data.datasets[0].data[tooltipItem.index];
         value = value.toString();
         value = value.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
              return value;
           }
       }
  },
   scales: {
     yAxes: [{
       ticks: {
         userCallback: function(value, index, values) {
           value = value.toString();
           value = value.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
              return value;
         }
        }
    }]
}

3 个答案:

答案 0 :(得分:3)

Javascript为您提供了一些解决方案。下面是前两个。

1。 number.toLocaleString

如上所述,.toLocaleString可以为您提供帮助,但请使用minimumFractionDigits而不是maximumFractionDigits

像下面这样:

number.toLocaleString(undefined, { maximumFractionDigits: 2 })

总结一下:

const decimalsFormated = number.toLocaleString(undefined, { maximumFractionDigits: 2 })

const finalFormated = String(decimalsFormated).replace(/\B(?=(\d{3})+(?!\d))/g, ",");

2。 Number.parseFloat +固定

let number = 123.1234
Number.parseFloat(number).toFixed(2);

在每种方法中,最好将解决方案包装在函数中:

function getCommaSeparatedTwoDecimalsNumber(number) {
    const fixedNumber = Number.parseFloat(number).toFixed(2);
    return String(fixedNumber).replace(/\B(?=(\d{3})+(?!\d))/g, ",");

}

您也可以使用正则表达式。我会说这太复杂了。

非常重要的一点要注意的是,您可能会或可能不想舍入最终结果。

toLocaleString与maxDigits一起使用只会删除这两位数字之后的所有内容。 使用toFixed会舍入您的输出。

此解决方案将使其正确取整:

Number(Math.round(1.005+'e2')+'e-2').toFixed(2);

从此处粘贴: Format number to always show 2 decimal places

最后一件事,也许是最重要的。 根据输入数字的格式,上述解决方案可能会或可能不会起作用。您需要确定输入格式,如果无法预见,请为每种可能性提供格式化程序:

1000000.123124

10000123123

100000,1239

1.12039

1,19012

根据格式,您需要执行的操作顺序可能会有所不同。

答案 1 :(得分:0)

您可以尝试像这样使用toLocaleString:

value = value.toLocaleString(undefined, { maximumFractionDigits: 2 });

它将根据您的语言环境格式化数字,并以千位分隔符和逗号后两位数字表示。

答案 2 :(得分:0)

您要寻找的东西:

  • 逗号
  • 无论数字多少,小数点后两位。

这是您的功能:

function get4DecimalPointsWithCommas(amount) {
    return amount.toLocaleString(undefined, { maximumFractionDigits: 4, minimumFractionDicits: 4 });
}