class Integer

Public Instance Methods

to_j(type = :positional) click to toggle source
# File lib/yen.rb, line 19
def to_j(type = :positional)
  cardinal = %w(零 一 二 三 四 五 六 七 八 九)
  base_unit = %w(十 百 千)
  unit = %w(万 億 兆 京 垓 予 穣 溝 澗 正 裁 極 恒河沙 阿僧祇 那由多 不可思議 無量大数)
  float_unit = %w(割 分 厘 毛 糸 忽 微 繊 沙 塵 埃 緲 漠 模糊 逡巡 須臾 瞬息 断指 刹那 六徳 虚 空 清 浄)

  return (type == :positional)? "0" : "零" if self.zero?

  numbers = []

  self.to_s.chars{ |num| numbers.unshift num.to_i }

  number_blocks = numbers.each_slice(4).to_a.reverse

  japanese = ""
  block_size = number_blocks.size

  number_blocks.each_with_index do |block, index|
    str = ""
    if type == :positional 
      num = block.reverse.join.to_i
      str += num.to_s unless num.zero?
    else
      block.each_with_index do |num, unit|
        if num.nonzero? 
          str += base_unit[unit-1] if unit.nonzero?

          if num == 1
            if unit.zero? || unit == 3
              if index != block_size-1 || str.size.zero?
                str += cardinal[num] 
              end
            end
          else
            str += cardinal[num]
          end
        end
      end
    end

    japanese += (type == :all)? str.reverse : str
    japanese += unit[number_blocks.size-(index+2)] if str.size.nonzero? && block_size != index+1
  end

  japanese
end
to_yen(type = :positional) click to toggle source
# File lib/yen.rb, line 15
def to_yen(type = :positional)
  self.to_j(type) + "円"
end