nptclのブログ

Common Lisp処理系nptの開発メモです。https://github.com/nptcl/npt

整数を英語で表現する2(中学レベル)

あまり大きくない整数を英語で表す方法について説明します。 どれくらいかというと、0から億くらいでしょうか。 それ以上の整数の表現は次章になります。

自分は中学レベルの英語の知識も危うかったため調べました。 せっかくなのでその内容をここに記載しておきます。 俺もわからんぜって方は、ここじゃなく別のサイトに飛んで、 ちゃんとした所で勉強したほうがいいかもしれません。 間違っている可能性がありますので。

では、あまり大きくない整数をshort scaleの英語で 表現する方法について説明します。

まずは0から19までの表現を示します。 せっかくなのでCommon Lispを使って出力します。 これらは暗記するしかありません。

* (dotimes (i 20) (format t "~D: ~:*~R, ~:*~:R~%" i))
0: zero, zeroth
1: one, first
2: two, second
3: three, third
4: four, fourth
5: five, fifth
6: six, sixth
7: seven, seventh
8: eight, eighth
9: nine, ninth
10: ten, tenth
11: eleven, eleventh
12: twelve, twelfth
13: thirteen, thirteenth
14: fourteen, fourteenth
15: fifteen, fifteenth
16: sixteen, sixteenth
17: seventeen, seventeenth
18: eighteen, eighteenth
19: nineteen, nineteenth

出力は「数: 英語表記, 序数表記」となります。

20から99までの表現は、十桁と一桁を組み合わせて表現します。 20, 30, ...といった十桁の表現の仕方も、暗記するしかありません。

* (dotimes (i 10) (format t "~D: ~:*~R, ~:*~:R~%" (* i 10)))
0: zero, zeroth
10: ten, tenth
20: twenty, twentieth
30: thirty, thirtieth
40: forty, fortieth
50: fifty, fiftieth
60: sixty, sixtieth
70: seventy, seventieth
80: eighty, eightieth
90: ninety, ninetieth

それでは2桁の数を考えます。
例えば48の場合、40-8のようにあらわします。

【例】48 → forty-eight

十桁と一桁の間にハイフン - をつけます。

【例】67 → sixty-seven

十桁が0の場合は十桁を記載しません。

【例】7 → seven

一桁が0の場合も一桁は記載しません。

【例】60 → sixty

つまり、40はfortyでありforty-zeroとは書かないし、 7はsevenでありをzeroty-sevenと書きません。

百の位が出てきた場合は、「百桁 hundred 下二桁」となります。 例えば123の場合は、1と23を分けて表記するため、

one hundred twenty-three

のようになります。

345の場合は

three hundred forty-five

205の場合は、十桁が省略されるので

two hundred five

560の場合は、一桁が省略されるので

five hundred sixty

800の場合は、十桁と一桁が省略されるので

eight hundred

これで0から999まで表現できました。

それ以上の数は、三桁に分けて特別な単位を付与します。 例えば1234567890の場合は、三桁区切りにすると次のようになります。

1,234,567,890

左のカンマから順に十億、百万、千に対応します。 英語ではそれぞれ次のように表現されます。

数値 英語 日本語
1,000,000,000 billion 十億
1,000,000 million 百万
1,000 thousand

考え方としては、次のようになります。

1 billion, 234 million, 567 thousand, 890

つまり、

* (format t "~R" 1234567890)
one billion two hundred thirty-four million five hundred sixty-seven thousand eight hundred ninety

注意点としては、三桁の場合と同じようにzeroは省略し、 記載が必要ない場合は単位も省略します。

例えば

1,000,000,000

one billion

であり、

one billion zero million zero thousand zero

ではありません。

それではCommon Lisp処理系の出力例を見てみます。

[sbclの実行例]

* (format t "~R" 1234567890)
one billion two hundred thirty-four million five hundred sixty-seven thousand eight hundred ninety

[clispの実行例]

* (format t "~R" 1234567890)
one billion, two hundred and thirty-four million, five hundred and sixty-seven thousand, eight hundred and ninety

上記2例では少しだけ表現が違っています。 sbclに対して、clispでは三桁区切りでカンマが挿入されています。 また、hundredの次にandが挿入されています。 この辺りはいろいろな流儀があるのでしょう。 好みでいいと思います。

今回は三桁区切りの表現方法を説明しました。 それではthousand, million, billionの次は何でしょうか。 これが次章の本題となります。