3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Swift] 数値を漢数字に変換する

Posted at

NumberFormatterを使えばいいです。が、いくつか注意点があります。

//漢数字
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
formatter.locale = .init(identifier: "ja-JP")
let number = 123456789012345678
if let string = formatter.string(from: NSNumber(value: number)){
    print(string)   //十二京三千四百五十六兆七千八百九十億千二百三十四万五千六百七十八
}

まずロケールを指定しないと.spellOutに設定しても英語になります。

数値が負だった場合はしっかり「マイナス」と付けてくれるので安心です。
ただ、数値が「百京」を超えると変換してくれず、代わりに三桁区切りの数字が返ってくるようになります。

let numberA = Int(1E18)
let numberB = Int(1E18) - 1

if let string = formatter.string(from: NSNumber(value: numberA)){
    print(string)   //1,000,000,000,000,000,000
}
if let string = formatter.string(from: NSNumber(value: numberB)){
    print(string)   //九十九京九千九百九十九兆九千九百九十九億九千九百九十九万九千九百九十九
}

Intのみを対象とするなら、実用的にはこのような関数を作っておく必要があると思います。

func toKansuji(from number: Int) -> String? {
    if number >= Int(1E18){
        return nil
    }
    if number <= -Int(1E18){
        return nil
    }
    return formatter.string(from: NSNumber(value: number))
}
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?