Module: NumberToKanji
- Defined in:
- lib/number_to_kanji.rb,
lib/number_to_kanji/version.rb,
lib/number_to_kanji/kanji_map.rb,
lib/number_to_kanji/small_number_to_kanji.rb,
lib/number_to_kanji/exceptions/negative_number_error.rb
Defined Under Namespace
Modules: Exceptions, SmallNumberToKanji
Constant Summary collapse
- RANGE_END =
1_000_000_000_000_000_000_000_000- VERSION =
'1.0.1'- KANJI_MAP =
{ 0 => '〇', 1 => '一', 2 => '二', 3 => '三', 4 => '四', 5 => '五', 6 => '六', 7 => '七', 8 => '八', 9 => '九' }.freeze
- KANJI_UNITS =
['', '万', '億', '兆', '京', '垓'].freeze
Class Method Summary collapse
Class Method Details
.call(number) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/number_to_kanji.rb', line 12 def call(number) raise(::TypeError) unless number.is_a?(::Integer) raise(::NumberToKanji::Exceptions::NegativeNumberError) if number.negative? raise(::RangeError, 'Numbers equal to or larger than 10^24 is not supported.') if number >= ::NumberToKanji::RANGE_END return ::NumberToKanji::KANJI_MAP[0] if number.zero? # 四桁ごとに区切りつつ、位の小さい順に並んだ配列を作る。 # 例: 123456789 => [6789, 2345, 1] # 例: 100006789 => [6789, 0, 1] separated_numbers = number.to_s.chars.reverse.each_slice(4).map(&:reverse).map(&:join).map { |i| Integer(i, 10) } kanji_with_unit_numbers = separated_numbers.map.with_index do |separated_number, index| _kanji_number_with_unit(separated_number, index) end kanji_with_unit_numbers.reverse.join end |