我正在使用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;
}
}
}]
}
答案 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 });
}