无法正确格式化数字

时间:2018-07-12 09:06:39

标签: javascript regex

我正在尝试通过格式化程序对表中的数字进行格式化,以使千位用逗号分隔,小数点用点分隔。

我设置了以下格式化程序功能,该功能可以处理非数字值和可能的无效空值:

  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的数字),它可以完美工作并用逗号分隔数字。但是对于小数,结果是可怕的,绝对没有意义:

enter image description here

编辑:

这是一个示例的两行原始数据包,因此您可以看到原始数据的样子。在这些情况下,它们是带有大量小数的浮点数:

enter image description here

您对这里的故障有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

下面的代码对我有用

var N = 1000;

console.log(N.toLocaleString());

您可以在numObj.toLocaleString

引用相同的内容

答案 1 :(得分:0)

收到的所有评论/答案的混合物以及对文档的一些阅读,使我得以找到方法:

res = val.toLocaleString("en-IN", {maximumFractionDigits: decimals, minimumFractionDigits: decimals}); 

单独使用“ .toLocaleString()”方法,不会将千位分隔符放在逗号中,因为我在西班牙。但是设置“ en-IN”语言环境后,开始将它们用作分隔符。然后,使用文档中的选项,我可以轻松地设置固定数量的小数。

现在效果很好。谢谢大家!