530000
→ 53万
みたいに漢数字の単位を付けたかった。
タイトルに漢数字って書いてあるから詐欺ってるみたいだけど五三万
への変換は今回はやりません。🙇🏿
早速コード
<?php function convert($value) { // 1000以下の場合は単位を付けずに返却 if ((int) $value < 1000) { return (string) $value; } $units = ['', '万', '億', '兆', '京']; // 右から桁数を分割していく $splits = array_reverse(str_split(strrev($value), 4)); // 桁数によって使用する単位の調整 array_splice($units, count($splits)); $filterUnits = array_reverse($units); $convert = ''; // 反転した数値を元に戻して単位をつける foreach ($splits as $index => $split) { // 0000の場合、表記を省略する $convert .= (int) $split === 0 ? '' : number_format(strrev($split)) . $filterUnits[$index]; } return $convert; } assert('私の戦闘力は53万です。' === '私の戦闘力は'.convert('530000').'です。'); // true
感想
- 単位が飛ぶ時の表記をどうしようか迷ったけど, 単位が
0000
の場合は省略するようにした。
(100000001
の場合,1億0000万0001
ではなく1億1
の表記になる) - 反対に, 漢字(
53万
) → 半角数字(530000
)に変換するのも考えたけど, 意外とやることが多くて諦めた。
必要に迫られたらやる。(やらないフラグ) - 漢字単位への変換前に文字列に変換すれば京以上の単位も付けれるんだろうけど, お金周りの変換がしたかっただけだから考慮してない。
PHP_INT_MAX
を超過する数値を扱いたい人はこっち来ないで😭😭😭 - 全体的にトリッキーなので誰か別の方法ご存知でしたらご指摘ください🙏🏻
- JSでやったほうが需要ありそう