module NumberToKanji
Constants
- KANJI_MAP
- KANJI_UNITS
- RANGE_END
- VERSION
Public Class Methods
call(number)
click to toggle source
# 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
Private Class Methods
_kanji_number_with_unit(number, index)
click to toggle source
# File lib/number_to_kanji.rb, line 33 def _kanji_number_with_unit(number, index) return if number.zero? kanji = ::NumberToKanji::SmallNumberToKanji.call(number) unit = ::NumberToKanji::KANJI_UNITS[index] "#{kanji}#{unit}" end
Private Instance Methods
_kanji_number_with_unit(number, index)
click to toggle source
# File lib/number_to_kanji.rb, line 33 def _kanji_number_with_unit(number, index) return if number.zero? kanji = ::NumberToKanji::SmallNumberToKanji.call(number) unit = ::NumberToKanji::KANJI_UNITS[index] "#{kanji}#{unit}" end
call(number)
click to toggle source
# 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