有没有人知道格式化“缩写”数字的好 javascript 片段?
Posted
技术标签:
【中文标题】有没有人知道格式化“缩写”数字的好 javascript 片段?【英文标题】:Is there a good javascript snippet anyone knows for formatting "abbreviated" numbers? 【发布时间】:2011-06-24 10:17:15 【问题描述】:键是缩写。例如,1m
代替 1000000
,12k
代替 12000
等等 - 就像 *** 上的一样!
除了尝试过之外,我不确定还可以添加什么:
format numbers abbreviated javascript
format 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";
应该做的工作。您当然可以根据自己的需要扩展它,甚至可以添加数字 < 1
。
【讨论】:
我认为应该反过来……但我不确定。以上是关于有没有人知道格式化“缩写”数字的好 javascript 片段?的主要内容,如果未能解决你的问题,请参考以下文章