2011-06-24 29 views
0

關鍵是簡稱。例如,1m而不是100000012k而不是12000等 - 非常像在StackOverflow上!是否有一個很好的javascript代碼片段知道格式化「縮寫」數字?

我不知道還有什麼可以添加其他比我已經試過:

format numbers abbreviated javascript
format numbers short javascript

和其他一些搜索和沖刷,沒有運氣的結果。我覺得有人之前一定要做到這一點,討厭重塑車輪和所有這一切!

乾杯

編輯:我在找取號,即12345並把它變成12k

對不起,我也不是很清楚!

+0

12K也可能是12288 - http://en.wikipedia.org/wiki/Kilobyte – Boldewyn

+0

你可以看看[這裏](http://stackoverflow.com/questions/3177855/how-to-format-numbers-similar-to-stack-overflow-reputation-format)或[this](http://stackoverflow.com/questions/2134161/format-number-like-stackoverflow-rounded-以千位後綴k)並將其逆轉... :) –

+0

你想要1000-> 1k或1k-> 1000'嗎? –

回答

4

這是我前段時間寫的一些代碼,但它工作正常。它甚至支持小數。

function is_numeric(string) { 
    for(var i = 0; i < string.length; i++) { 
     if(string.charAt(i) < '0' || string.charAt(i) > '9') { 
      return false; 
     } 
    } 
    return true; 
} 

function charValueMultiplier(letter) { 
    switch(letter) { 
     case 'M': 
     case 'm': return 1000000; 
     case 'k': 
     case 'K': return 1000; 
     default: return 0; 
    } 
} 

// parse string like 1.5M or 10k and return the number 
function parseNumber(string) { 
    string = string.replace(/ /g, ''); // remove spaces 
    var total   = 0; 
    var partial   = 0; 
    var partialFraction = 0; 
    var fractionLength = 0; 
    var isFraction  = false; 

    // process the string; update total if we find a unit character 
    for(var i = 0; i < string.length; i++) { 
     var c = string.substr(i, 1); 
     if(c == '.' || c == ',') { 
      isFraction = true; 
     } 
     else if(is_numeric(c)) { 
      if(isFraction) { 
       partialFraction = partialFraction * 10 + parseInt(c, 10); 
       fractionLength++; 
      } 
      else { 
       partial = partial * 10 + parseInt(c, 10); 
      } 
     } 
     else { 
      total += charValueMultiplier(c) * partial + charValueMultiplier(c) * partialFraction/Math.pow(10, fractionLength); 

      partial   = 0; 
      partialFraction = 0; 
      fractionLength = 0; 
      isFraction  = false; 
     } 
    } 

    return Math.round(total + partial + partialFraction/Math.pow(10, fractionLength)); 
} 
+0

我認爲你應該爲'string.replace(/ /,'')'添加'g'但除此之外,我相信你;)+1 –

+0

謝謝!我會盡快給它... – joshcomley

+0

嗨新的js @ThiefMaster - 這是很容易能夠轉換大(bigint)數字如萬億10^12(T)的Quadrillion 10^15(P)和Quintillion 10^18(E) - 如果是的話,如果你有時間,請你帶我走過 – soulshined

0

如果我理解正確的話,你一些n並希望將其格式化爲一個字符串。然後

// n being the number to be formatted 
var s = "" + n; // cast as string 
if (n >= 1000000) { 
    s = s.substring(0, s.length - 6) + "M"; 
} else if (n >= 1000) { 
    s = s.substring(0, s.length - 3) + "k"; 
} 

應該做的工作。你當然可以根據你的需要擴展它,甚至包括數字< 1

+0

我認爲它應該是相反的......但我不確定。 –

1

我做了一個NPM包,可以爲你做這個:(通過Browserify或瀏覽器)https://www.npmjs.com/package/approximate-number對Node.js的

用法:

npm install --save approximate-number 

,然後在你的代碼:

var approx = require('approximate-number'); 
approx(123456); // "123k" 

或者,通過鮑爾在瀏覽器中使用:

bower install approximate-number 

然後

window.approximateNumber(123456); // "123k" 
+1

你走了,更新了 –

相關問題