我正在尝试通过格式化程序对表中的数字进行格式化,以使千位用逗号分隔,小数点用点分隔。
我设置了以下格式化程序功能,该功能可以处理非数字值和可能的无效空值:
this.table.formatter = (val, col) => {
const numberWithCommas = (x, decimals) => {
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
if(parts[1]){
parts[1] = Number(parts[1]).toFixed(decimals);
}
return decimals > 0 ? parts.join(".") : parts[0];
}
let res;
if (col == "period" || col == "channel") {
res = isNaN(val) ? val : " ";
return res;
} else {
const decimals = this.config.data.metric["format"]["decimals"] | 0;
if (val != null) {
if (!isNaN(val)) {
res = numberWithCommas(val, decimals);
} else {
res = val;
}
return res != " " ? this.config.data.metric["format"].prefix + " " + res + " " + this.config.data.metric["format"].postfix : "";
}else{
return "";
}
}
}
对于不带小数的数字(其中变量“小数”为0的数字),它可以完美工作并用逗号分隔数字。但是对于小数,结果是可怕的,绝对没有意义:
编辑:
这是一个示例的两行原始数据包,因此您可以看到原始数据的样子。在这些情况下,它们是带有大量小数的浮点数:
您对这里的故障有任何想法吗?谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
收到的所有评论/答案的混合物以及对文档的一些阅读,使我得以找到方法:
res = val.toLocaleString("en-IN", {maximumFractionDigits: decimals, minimumFractionDigits: decimals});
单独使用“ .toLocaleString()”方法,不会将千位分隔符放在逗号中,因为我在西班牙。但是设置“ en-IN”语言环境后,开始将它们用作分隔符。然后,使用文档中的选项,我可以轻松地设置固定数量的小数。
现在效果很好。谢谢大家!