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