Javascript 带逗号和两个小数点的数值格式

Javascript 带逗号和两个小数点的数值格式,javascript,chart.js,number-formatting,Javascript,Chart.js,Number Formatting,我正在使用chart.js显示我的销售额。问题是我无法正确地将数据转换为带有逗号和两位小数的数字格式 当数据为整数时,输出正确。然而,当我显示平均销售额时,我得到的输出如下 平均销售额(无格式)1000.2017 平均销售额(格式)1000.2017 总销售额(无格式)1000 总销售额(带格式)1000 如何在javascript中正确格式化输出 tooltips: { callbacks: { label: function(tooltipItem, data) {

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

当数据为整数时,输出正确。然而,当我显示平均销售额时,我得到的输出如下

平均销售额(无格式)1000.2017
平均销售额(格式)1000.2017
总销售额(无格式)1000
总销售额(带格式)1000

如何在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;
         }
        }
    }]
}

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

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

它将根据您的语言环境使用千个分隔符和逗号后的两位数字格式化数字。

Javascript提供了一些解决方案。下面我想到了前两个

1。数字。toLocaleString

如前所述,.ToLocalString可以帮助您,但不要使用
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+toFixed

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

}
您也可以使用regex。但我想说这太复杂了

另外,要注意的一件非常重要的事情是,您可能想要也可能不想要最终结果

对maxDigits使用
toLocaleString
,只会删除这两个数字后面的所有内容。 使用
toFixed
将不恰当地对输出进行四舍五入

此解决方案将适当地绕过它:

Number(Math.round(1.005+'e2')+'e-2').toFixed(2);
从这里粘贴:

最后一件事,可能是最重要的。 根据输入编号的格式,上述解决方案可能有效,也可能无效。您需要决定输入格式,如果无法预见,请为每种可能性提供格式化程序:

1000000.123124

1000013123

100001239

1.12039

119012

等等


根据格式,您需要采取的行动顺序可能会有所不同

你在寻找什么:

  • 逗号
  • 2个小数点,无论数字是多少
以下是您的功能:

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

“1000.2017”是一个数字还是两个数字?“平均销售额(格式)1000.2017”实际上是你想要的吗?这不是一个有效的数字格式。不,这是我的代码的输出。我想修复格式。您使用的浏览器是什么,不是所有的浏览器都支持带参数的本地字符串(Edge支持)。我使用的是chromeit,它不起作用,原因此答案中的
最小值
应替换为
最大值
,请更新我的评论和/或答案,因为它有助于:)Number.parseFloat(Number).toFixed(2).替换(/[.]/,“,”);正在工作,但没有逗号。我需要一个逗号和小数点,如1000.00,以清除Number.parseFloat(Number).toFixed(2)的输出。替换(/[。]/,“,”));我需要的是1000.00,实际上不是,因为
。替换(/[.]/,“,”)将用逗号替换点。一开始我误解了你。现在我的答案可以了吗?