如何重写 JavaScript 货币格式以缩写美元金额

How to rewrite JavaScript currency formatting to abbreviate dollar amount

我正在使用 chartjs-plugin-datalabels 永久显示每个图表数据集上方的数据标签。我在每个图表脚本中使用以下代码以美元显示货币金额:

plugins: {
    datalabels: {
        formatter: function(value, context) {
            return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
        }
    }
}

然后输出到:$#,###,###

为了节省 space,我如何重写此代码以像这样的缩写方式显示上述金额:$#.#m。第一个逗号变成小数点,其余整数四舍五入。

因此,数十亿人将拥有 B,数百万人将拥有 M,而数千人将拥有 K ,等等...

示例:

10,500,000,000 美元 --> 10.5 美元

1,500,000,000 美元 --> 1.5b 美元

10,500,00 美元 --> 1050 万美元

1,500,000 美元 --> 150 万美元

10,500 美元 --> 10.5 千美元

1,500 美元 --> 1500 美元

.replace() 部分的细分也将不胜感激。

在这里找到我的答案:

function nFormatter(num) {
     if (num >= 1000000000) {
        return (num / 1000000000).toFixed(1).replace(/\.0$/, '') + 'G';
     }
     if (num >= 1000000) {
        return (num / 1000000).toFixed(1).replace(/\.0$/, '') + 'M';
     }
     if (num >= 1000) {
        return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'K';
     }
     return num;
}