2013-07-13 38 views
9

我想用一个Metric Prefix 3显著数字像这样显示数字:格式化JavaScript数字与公制前缀像1.5K,1M,1G等

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... 

我可以写我自己的JavaScript函数这样做,但我想知道是否有这样的格式化数字的标准方式?

+0

@Juhana谢谢,这就是我一直在寻找,不知道为什么我没有看到它 - 投票结束我的问题。 – magritte

回答

21

你可以把范围中的对象的数组,只是循环通过它来格式化数字:

var ranges = [ 
    { divider: 1e18 , suffix: 'P' }, 
    { divider: 1e15 , suffix: 'E' }, 
    { 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(); 
} 

用例:

var s = formatNumber(999000); 

同时还处理负数,你会在功能中首先添加:

if (n < 0) { 
    return '-' + formatNumber(-n); 
    } 
+0

这是一个整洁的想法,谢谢 - 我需要稍微调整一下,但最多可以显示3位有效数字。我把你的toString()改成了几乎是这样的toFixed()调用,但999999显示为1000k而不是1M。 – magritte

+0

@magritte:嗯,它应该,因为999999不是1000000,所以它是999.999 k。 – Guffa

+1

负数的另一种选择是'if(Math.abs(n)> = ranges [i] .divider)'。 –