javascript - JavaScript 将长数字转换为缩写字符串,有特殊的短小要求

标签 javascript numbers

在 JavaScript 中,如何编写一个函数将给定的 [编辑:正整数] 数字(低于 1000 亿)转换为 3 个字母的缩写 - 其中 0-9 和 a-z/A-Z 算作一个字母,但点(因为它在许多比例字体中非常小)不会,并且会在字母限制方面被忽略?

这个问题与 this helpful thread 有关,但不一样;例如,该功能将在哪里转向“123456 -> 1.23k”(“123.5k”是 5 个字母)我正在寻找“123456 -> 0.1m”(“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;
}

最佳答案

我认为 ninjagecko 的解决方案不太符合您想要的标准。以下函数执行:

function intToString (value) {
    var suffixes = ["", "k", "m", "b","t"];
    var suffixNum = Math.floor((""+value).length/3);
    var shortValue = parseFloat((suffixNum != 0 ? (value / Math.pow(1000,suffixNum)) : value).toPrecision(2));
    if (shortValue % 1 != 0) {
        shortValue = shortValue.toFixed(1);
    }
    return shortValue+suffixes[suffixNum];
}

对于大于 99 万亿的值,将不会添加任何字母,这可以通过附加到“后缀”数组来轻松修复。

Philipp 编辑如下:通过以下更改,它完全符合所有要求!

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

关于javascript - JavaScript 将长数字转换为缩写字符串,有特殊的短小要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599933/

相关文章:

java - Java 中的数字金字塔

javascript匿名函数不更新变量

javascript - 如何循环嵌套对象 - javascript

java - 将文本中写入的数字相加所需的循环

c - 退出 FOR 并打印消息的任何想法

c - 彼此不匹配的随机数

java - 将两位数格式的整数保存在Java中的变量中

javascript - 为什么 BST(英国夏令时/夏令时)被添加到我的 Node 日期时间中?

javascript - 编写自定义 webpack 解析器

javascript - Jshint:循环中的匿名函数(问题)