Кто-нибудь знает хороший фрагмент javascript для форматирования «сокращенных» чисел? - PullRequest
0 голосов
/ 24 июня 2011

Ключ сокращенно . Например, 1m вместо 1000000 и 12k вместо 12000 и т. Д. - очень похоже на StackOverflow!

Я не уверен, что еще добавить, кроме того, что я пробовал:

format numbers abbreviated javascript
format numbers short javascript

И еще несколько поисков и безрезультатных результатов. Я чувствую, что кто-то должен был сделать это раньше, ненавижу заново изобретать колеса и все такое!

Приветствия

Редактировать: я хочу взять число, т.е. 12345 и превратить его в 12k

Извините, я не очень ясно!

Ответы [ 3 ]

4 голосов
/ 24 июня 2011

Вот код, который я написал довольно давно, но он отлично работает.Он даже поддерживает десятичные дроби.

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));
}
1 голос
/ 14 декабря 2016

Я сделал пакет npm, который может сделать это для вас: https://www.npmjs.com/package/approximate-number

Использование для Node.js (или браузеров через Browserify):

npm install --save approximate-number

и затем в вашем коде:

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

Или, для использования в браузерах через Bower:

bower install approximate-number

А потом

window.approximateNumber(123456); // "123k" 
0 голосов
/ 24 июня 2011

Если я правильно понимаю, у вас есть число 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...