【问题标题】:Abbreviate a localized number in JavaScript for thousands (1k) and millions (1m)将 JavaScript 中的本地化数字缩写为千 (1k) 和百万 (1m)
【发布时间】:2014-09-01 19:27:52
【问题描述】:

我正在使用以下 Javascript 在我的网站上显示我的 Instagram 关注者数量。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
    /* 
        Get access token & ID through http://jelled.com/instagram/access-token
        Register your app here @ Instagram http://instagram.com/developer 
        */
    $(function() {
        $.ajax({
            type: "GET",
            dataType: "jsonp",
            cache: true,
            url: "https://api.instagram.com/v1/users/{ID}/?access_token={ACCES_TOKEN}",
            success: function(data) {
                var ig_count = data.data.counts.followed_by.toString();
                ig_count = add_commas(ig_count);
                $(".instagram_count").html(ig_count);
            }
        });

        function add_commas(number) {
            if (number.length > 3) {
                var mod = number.length % 3;
                var output = (mod > 0 ? (number.substring(0, mod)) : '');
                for (i = 0; i < Math.floor(number.length / 3); i++) {
                    if ((mod == 0) && (i == 0)) {
                        output += number.substring(mod + 3 * i, mod + 3 * i + 3);
                    } else {
                        output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
                    }
                }
                return (output);
            } else {
                return number;
            }
        }
    });
</script>
<span class="instagram_count"> </span>

如您所见,有一个功能可以在必要时添加逗号。我还想在另一个类中显示关注者数量的缩写,例如 3,291 个关注者为 3.2k。因此,将完整的追随者数量保留在一个类别中,而将缩写保留在另一个类别中。我在 JavaScript 方面不是最出色的,但我正在慢慢学习。

我发现了一个类似的问题 (Is there a way to round numbers into a reader friendly format? (e.g. $1.1k)),但没有成功将它实现到我的 JavaScript 中。

非常感谢任何帮助。

【问题讨论】:

  • 始终将详细计数保存在内存中。仅将add_commas() 和类似名称用于显示
  • 3,291 个关注者为 3.2k
  • 您是如何尝试使用您找到的其他问题中的代码的?请向我们展示您的尝试。

标签: javascript instagram


【解决方案1】:
function intlFormat(num)
{
  return new Intl.NumberFormat().format(Math.round(num*10)/10);
}
function makeFriendly(num)
{
  if(num >= 1000000)
    return intlFormat(num/1000000)+'M';
  if(num >= 1000)
    return intlFormat(num/1000)+'k';
  return intlFormat(num);
}

产量:

makeFriendly(1234567)
"1.2M"
makeFriendly(123457)
"123.5k"
makeFriendly(1237)
"1.2k"
makeFriendly(127)
"127"

Intl 是用于实现国际化行为的 Javascript 标准“包”。 Intl.NumberFormatter is specifically the localized number formatter。因此,此代码实际上尊重您本地配置的千位和小数分隔符。

【讨论】:

  • 但是后缀没有本地化。
  • 友好数字向上取整。 28.551 结果为 28.6。
  • @glen-84 后缀实际上是国际标准化的。
【解决方案2】:
new Intl.NumberFormat('en-GB', { notation: "compact", compactDisplay: "short" }).format(9876)

输出9.9K

信用:mdn

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-11-22
    • 1970-01-01
    • 2018-02-08
    相关资源
    最近更新 更多