class Rational

Public Instance Methods

to_rec_decimal() click to toggle source

分数を循環小数に直す

@return [String]
# File lib/kaki/utils/rec_decimal.rb, line 4
def to_rec_decimal
  f, num = (self < 0) ? ["-", -self] : ["", self]
  
  i = num.to_i
  result = f + i.to_s
  ra = num - i
  return result if ra.zero?
  result += "."
  
  remainder = ra.numerator
  deno      = ra.denominator
  place = []
  rems = []
  begin
    rems  << remainder
    place << remainder * 10 / deno
    remainder = remainder * 10 % deno
    return result + place.join if remainder.zero?
  end while not (idx = rems.find_index(remainder))
  place.insert(idx, "(")
  result + place.join + ")"
end