在 JavaScript 中,如何编写一个函数,将给定的[编辑: 正整数正整数]数字(低于1000亿)转换为一个3个字母的缩写——其中0-9和 A-Z/A-Z 被计为一个字母,但点(因为它在许多比例字体中是如此微小)不会,并将被忽略的字母限制?
这个问题和 这个有用的线索有关,但是不一样; 例如,函数会转到哪里,比如“123456-> 1.23 k”(“123.5 k”是5个字母) ,我在寻找一个函数,它的值是“123456-> 0.1 m”(“0[“1m”是3个字母)。例如,这将是希望函数的输出(左原始值,右理想返回值) :
0 "0"
12 "12"
123 "123"
1234 "1.2k"
12345 "12k"
123456 "0.1m"
1234567 "1.2m"
12345678 "12m"
123456789 "0.1b"
1234567899 "1.2b"
12345678999 "12b"
谢谢!
更新: 谢谢! 当作出以下修订时,答案已经出现,并且符合要求:
function abbreviateNumber(value) {
var newValue = value;
if (value >= 1000) {
var suffixes = ["", "k", "m", "b","t"];
var suffixNum = Math.floor( (""+value).length/3 );
var shortValue = '';
for (var precision = 2; precision >= 1; precision--) {
shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
var dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,'');
if (dotLessShortValue.length <= 2) { break; }
}
if (shortValue % 1 != 0) shortValue = shortValue.toFixed(1);
newValue = shortValue+suffixes[suffixNum];
}
return newValue;
}