class Integer

Public Instance Methods

to_kan() click to toggle source
# File lib/i_to_kan.rb, line 7
def to_kan
  return kansuji(self) if self == 0

  str = ''
  num = self < 0 ? -self : self
  {
    10 **  0 => '',
    10 **  4 => '万',
    10 **  8 => '億',
    10 ** 12 => '兆',
    10 ** 16 => '京',
    10 ** 20 => '垓',
    10 ** 24 => '𥝱',
    10 ** 28 => '穣',
    10 ** 32 => '溝',
    10 ** 36 => '澗',
    10 ** 40 => '正',
    10 ** 44 => '載',
    10 ** 48 => '極',
    10 ** 52 => '恒河沙',
    10 ** 56 => '阿僧祇',
    10 ** 60 => '那由他',
    10 ** 64 => '不可思議',
    10 ** 68 => '無量大数'
  }.each do |digit, ja|
    sliced = num / digit
    break if sliced == 0
    _4dig = sliced % 10_000
    str = to_sen_hyaku_jyu(_4dig) + ja + str if _4dig > 0
  end
  str = '-' + str if self < 0
  str
end

Private Instance Methods

kansuji(i) click to toggle source
# File lib/i_to_kan.rb, line 61
def kansuji(i)
  %w(零 一 二 三 四 五 六 七 八 九)[i]
end
to_sen_hyaku_jyu(_4dig) click to toggle source
# File lib/i_to_kan.rb, line 43
def to_sen_hyaku_jyu(_4dig)
  str = ''
  {
    10 ** 0 => '',
    10 ** 1 => '十',
    10 ** 2 => '百',
    10 ** 3 => '千'
  }.each do |digit, ja|
    sliced = _4dig / digit
    break if sliced == 0
    num = sliced % 10
    next if num == 0
    tmp = kansuji(num) if num > 1 || digit == 1
    str = tmp.to_s + ja + str
  end
  str
end