Module: Kgl::SuuMod

Included in:
Integer
Defined in:
lib/kgl/suu.rb

Overview

整数を日本語等で表した時の文字列(self<0ならRangeError)を返すメソッド Integer#express を提供する。補助的に使用する定数や関数は Integer::SuuConstantsAndSubFunctions モジュールで定義されている。Integer クラスでこのモジュールを include している。第一引数 lang には文字列を与える。lang の先頭の文字(大文字小文字問わず)でどの言語に変換するかを判断する。以下,変換可能な言語とその補足説明を記す。d: 十進位取り

ただの Integer#to_s 。

f: 浮動小数点数

第二引数 acc を使用する。
ほぼ "%1.#{acc-1}e" % self.to_f と同じだが,Float の範囲外の大きな整数でも使える。
acc が1未満の場合は ArgumentError を発生。

j: 日本語

一般に用いられる万進法による中数である。極以上を万万進とすることや,無量大数を分けることはしない。
千~においては省略しないこともままあるが,ここでは十,百,千~の位が1のとき一の文字を省略する。
千無量大数の十倍以上の数は表わせないので RangeError を発生。
参考:無量大数の彼方へ (http://www.sf.airnet.ne.jp/ts/language/largenumber.html)

m: 中数(万万進)。

日本語のように十,百,千~の位が1のとき一の文字を省略するのか定かでないが,ここでは省略しないことにした。
一千万無量大数の十倍以上の数は表わせないので RangeError を発生。
参考:無量大数の彼方へ (http://www.sf.airnet.ne.jp/ts/language/largenumber.html)

a: 英語(アメリカ式) b: 英語(ヨーロッパ式)

参考:Name of a Number (http://isthe.com/chongo/tech/math/number/number.html)

Constant Summary collapse

Ichi =
['', '', '', '', '', '', '', '', '', ''].freeze
Juu =
['', '', '', ''].freeze
Man =
['', '', '', '', '', '', '', '', '', '', '', '', '',
'恒河沙', '阿僧祇', '那由他', '不可思議', '無量大数'].freeze
Mi =
['', 'm', 'b', 'tr', 'quadr', 'quint', 'sext', 'sept', 'oct', 'non'].freeze
Un =
['', 'un', 'do', 'tre', 'quattuor', 'quin', 'sex', 'septen', 'octo', 'novem'].freeze
Gin =
['', 'dec', 'vigin', 'trigin', 'quadragin', 'quinquagin',
'sexagin', 'septuagin', 'octogin', 'nonagin'].freeze
Cen =
['', 'cen', 'ducen', 'trecen', 'quadringen', 'quingen',
'sescen', 'septingen', 'octingen', 'nongen'].freeze
One =
['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine','ten', 'eleven',
'twelve', 'thirteen', 'forteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'].freeze
Ten =
['', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'].freeze