有没有人知道格式化“缩写”数字的好 javascript 片段?

Posted

技术标签:

【中文标题】有没有人知道格式化“缩写”数字的好 javascript 片段?【英文标题】:Is there a good javascript snippet anyone knows for formatting "abbreviated" numbers? 【发布时间】:2011-06-24 10:17:15 【问题描述】:

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

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

format numbers abbreviated javascriptformat numbers short javascript

还有其他一些搜索并没有运气搜索结果。我觉得有人以前一定做过,讨厌重新发明***之类的!

干杯

编辑:我正在寻找一个数字,即 12345 并将其转换为 12k

对不起,我不是很清楚!

【问题讨论】:

12k 也可能是 12288 - en.wikipedia.org/wiki/Kilobyte 你可以看看this 或this 并把它倒过来... :) 你想要1000 -> 1k还是1k -> 1000 【参考方案1】:

这是我很久以前写的一些代码,但它工作正常。它甚至支持小数。

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

【讨论】:

我认为你应该在string.replace(/ /, '') 中添加一个g 但除此之外,我相信你;) +1 嗨,js @ThiefMaster 的新手-这很容易转换大 (bigint) 数字,例如 Trillion 10^12 (T) Quadrillion 10^15 (P) 和 Quintillion 10^18 (E) - 如果可以的话,如果你有时间,你能帮我看看吗【参考方案2】:

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

【讨论】:

【参考方案3】:

如果我理解正确,您一个数字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";

应该做的工作。您当然可以根据自己的需要扩展它,甚至可以添加数字 &lt; 1

【讨论】:

我认为应该反过来……但我不确定。

以上是关于有没有人知道格式化“缩写”数字的好 javascript 片段?的主要内容,如果未能解决你的问题,请参考以下文章

用于格式化数字和本地化的缩写

ggplot2中y比例标签的好K/M/G缩写

JavaScript 中的数字字符串格式化

C# 日期时间格式化

你不知道的AI机器人:有“人”追求“诗和远方”,有“人”是数据分析的好帮手

想深入学习C#语言,有没有达人知道C#的好的资料呢?