2013-07-13 5 views
9

Chcę wyświetlania liczb przy użyciu Metric Prefix z 3 cyfr znaczących tak:Formatuje liczbę javascript z Metric prefiksu jak 1.5K, 1M, 1G, etc

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

mógłbym napisać moje własne javascript funkcja zrób to, ale zastanawiałem się, czy istnieje standardowy sposób formatowania liczb takich jak ten?

+0

@Juhana dziękuje, dokładnie tego szukałem, nie wiem, dlaczego tego nie widziałem - głosowali, aby zamknąć moje pytanie. – magritte

Odpowiedz

21

Można umieścić zakresy w tablicę obiektów, a tylko pętli do formatu liczby: przykład

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(); 
} 

Zastosowanie:

var s = formatNumber(999000); 

Aby również obsługiwać liczb ujemnych, byś dodaj to najpierw w funkcji:

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

To fajny pomysł, dziękuję - muszę go trochę poprawić, aby uzyskać maksymalnie 3 ważne liczby do pokazania. Zmieniłem twoją metodę toString() na wywołanie toFixed(), które prawie to robi, ale 999999 pokazuje 1000k zamiast 1M. – magritte

+0

@magritte: Cóż, raczej powinno, ponieważ 999999 nie jest całkiem 1000000, czyli 999.999 k. – Guffa

+1

Inną opcją dla liczb ujemnych jest 'if (Math.abs (n)> = ranges [i] .divider)'. –

Powiązane problemy