1K
通貨の値を、千に等しい 、または1.1K
千でない場合は 、 などの形式で表示し、千未満の場合は通常の、などを表示するために、JavaScript を使用して数値をフォーマットする必要がありますか?1.2K
1.9K
500
100
250
ベストアンサー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.findLast
ES2023が必要です。エラーが発生した場合はlookup.findLast(...)
、lookup.slice().reverse().find(...)