【问题标题】:How to rewrite JavaScript currency formatting to abbreviate dollar amount如何重写 JavaScript 货币格式以缩写美元金额
【发布时间】:2018-06-27 22:41:57
【问题描述】:

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

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

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

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

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

例子:

$10,500,000,000 --> $10.5b

$1,500,000,000 --> $1.5b

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

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

$10,500 --> $10.5k

$1,500 --> $1.5k

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

【问题讨论】:

  • 如果你致力于一个单行正则表达式,我认为它可以做到,但最好只写一个简单的函数:将字符串转换为数字并除以 1000,直到它太小并且求单位 (k, m, b)
  • 如果可以的话,我想把它保留为一行表达式
  • @Halcyon 你有一个简单函数的例子吗?我可以在你的第一条评论中使用吗?我可以很好地编辑 javascript,但对于从头开始编写来说并不多。

标签: javascript formatting chart.js currency


【解决方案1】:

在这里找到我的答案:

https://stackoverflow.com/a/14994860/7811137

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2020-10-25
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多