1000以上の場合は2.5K、それ以外の場合は900として数値をフォーマットします質問する

1000以上の場合は2.5K、それ以外の場合は900として数値をフォーマットします質問する

1K通貨の値を、千に等しい 、または1.1K千でない場合は 、 などの形式で表示し、千未満の場合は通常の、などを表示するために、JavaScript を使用して数値をフォーマットする必要がありますか?1.2K1.9K500100250

ベストアンサー1

より一般化されたバージョン:

function nFormatter(num, digits) {
  const lookup = [
    { value: 1, symbol: "" },
    { value: 1e3, symbol: "k" },
    { value: 1e6, symbol: "M" },
    { value: 1e9, symbol: "G" },
    { value: 1e12, symbol: "T" },
    { value: 1e15, symbol: "P" },
    { value: 1e18, symbol: "E" }
  ];
  const regexp = /\.0+$|(?<=\.[0-9]*[1-9])0+$/;
  const item = lookup.findLast(item => num >= item.value);
  return item ? (num / item.value).toFixed(digits).replace(regexp, "").concat(item.symbol) : "0";
}

/*
 * Tests
 */
const tests = [
  { num: 0, digits: 1 },
  { num: 12, digits: 1 },
  { num: 1234, digits: 1 },
  { num: 100000000, digits: 1 },
  { num: 299792458, digits: 1 },
  { num: 759878, digits: 1 },
  { num: 759878, digits: 0 },
  { num: 123, digits: 1 },
  { num: 123.456, digits: 1 },
  { num: 123.456, digits: 2 },
  { num: 123.456, digits: 4 }
];
tests.forEach(test => {
  console.log("nFormatter(%f, %i) = %s", test.num, test.digits, nFormatter(test.num, test.digits));
});

lookupには、昇順にソートされた SI プレフィックスが含まれます。 は、数値regexpの末尾のゼロ (および可能な場合はドット) と一致します。

注記:

Array.findLastES2023が必要です。エラーが発生した場合はlookup.findLast(...)lookup.slice().reverse().find(...)

おすすめ記事