使用公制前缀(如1.5K,1M,1G等)格式化javascript编号

mag*_*tte 9 javascript formatting

我想使用带有3位有效数字的Metric Prefix来显示数字,如下所示:

1 shows as 1
999 shows as 999
1000 shows as 1K
999000 shows as 999K
1000000 shows as 1M
1500000 shows as 1.5M
1000000000 shows as 1G
etc...
Run Code Online (Sandbox Code Playgroud)

我可以编写自己的javascript函数来执行此操作,但我想知道是否有一种标准方式来格式化这样的数字?

Guf*_*ffa 24

您可以将范围放在一个对象数组中,然后循环遍历它以格式化数字:

var ranges = [
  { divider: 1e18 , suffix: 'E' },
  { divider: 1e15 , suffix: 'P' },
  { divider: 1e12 , suffix: 'T' },
  { divider: 1e9 , suffix: 'G' },
  { divider: 1e6 , suffix: 'M' },
  { divider: 1e3 , suffix: 'k' }
];

function formatNumber(n) {
  for (var i = 0; i < ranges.length; i++) {
    if (n >= ranges[i].divider) {
      return (n / ranges[i].divider).toString() + ranges[i].suffix;
    }
  }
  return n.toString();
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

var s = formatNumber(999000);
Run Code Online (Sandbox Code Playgroud)

要处理负数,您可以在函数中首先添加:

  if (n < 0) {
    return '-' + formatNumber(-n);
  }
Run Code Online (Sandbox Code Playgroud)