是否有一个很好的javascript片段,任何人都知道格式化“缩写”数字?

时间:2011-06-24 10:17:16

标签: javascript string-formatting number-formatting

键是缩写。例如,1m代替100000012k代替12000等 - 就像在StackOverflow上一样!

我不确定除了我尝试过之外还要添加什么:

format numbers abbreviated javascript
format numbers short javascript

还有其他一些搜索,并且没有运气地搜索结果。我觉得某人之前必须这样做,讨厌重新发明轮子等等!

干杯

编辑:我想要一个号码,即12345并将其转换为12k

抱歉,我不太清楚!

3 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:1)

我制作了一个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" 

答案 2 :(得分: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