JavaScriptで1000を1Kに1000000を1Mに省略する方法

よくYouTubeの再生回数などで100万は1M(ミリオン)に1000は1K(キロ)に省略して表示されることがあります
今回は1000を1Kに変換する方法を紹介します。

1000を1Kに1000000を1Mに変換する

function convertNumberFormat(num) {
    num = num.toString().replace(/[^0-9.]/g, '');
    if (num < 1000) {
        return num;
    }
    let si = [
      {v: 1E3, s: "K"},
      {v: 1E6, s: "M"},
      {v: 1E9, s: "B"},
      {v: 1E12, s: "T"},
      {v: 1E15, s: "P"},
      {v: 1E18, s: "E"}
      ];
    let index;
    for (index = si.length - 1; index > 0; index--) {
        if (num >= si[index].v) {
            break;
        }
    }
    return (num / si[index].v).toFixed(2).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[index].s;
}

convertNumberFormat(1200); //1.2K
convertNumberFormat(2200000); //2.2M

まず100万など入ってくる値を1Mなどにするので文字列に変換する必要があ流のでtoString()で文字列に変換します。
入ってくる値が1000以下であれば返還はしません。
JavaScriptでは「〜e」に続く数字で桁数を制御して表示することができます。
変数のsiには数字に対応する省略記号をオブジェクトに格納します。

1e1 //10
1e2 //100
1e3 //1000
1e4 //10000
1e5 //100000

以下のループで入っていきた値がどの省略に対応するかbreak 文で実行します。
これでindexには値に対応するkeyが入ります。

let index;
// 変数siに格納されているオブジェクトを大きい値から順番に引いていきnumの方が大きくなった時点でbreakする
for (index = si.length - 1; index > 0; index--) {
  if (num >= si[index].v) {
    break;
  }
}

最後にreturnで入ってきた値から省略したい数を割り、toFixedを利用して小数点以下の桁を指定して数値をを丸め、replaceした上でお尻に省略したい記号をくっつけて変換は完了です。


return (num / si[index].v).toFixed(2).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[index].s;

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。