如何将分数简化为混合分数

时间:2014-10-10 20:47:51

标签: ruby math

我有一个名为value的变量。该值将转换为Rational对象。我需要将它简化为混合分数。我想知道如何简化分数。例如,我想将513/16转换为32 1/16

我的代码如下所示:

value = ...
value = value.to_r #=> (1/12)

3 个答案:

答案 0 :(得分:3)

据我所知,理性将自己存储为numerator / denominator。但是你可以制作一个简化的to_s方法来为你格式化它。

试试这个:

class Rational

  def to_simplified_s
    if self < 1
      to_s
    else
      truncated = self.truncate
      "#{truncated} #{self - truncated}"
    end
  end

end

puts Rational(1, 2).to_simplified_s
puts Rational(513, 16).to_simplified_s

打印:

1/2
32 1/16

答案 1 :(得分:1)

无需重新发明轮子:

require 'fractional'
puts Fractional.new(513/16r).to_s(mixed_fraction: true)

答案 2 :(得分:0)

以尼克·维斯(Nick Veys)的答案为基础,但是当小数部分实际上是整数时,要多加注意:

class Rational

  def to_simplified_s
    if self < 1
      to_s
    else
      truncated = self.truncate
      truncated == self ? truncated.to_s : "#{truncated} #{self - truncated}"
    end
  end

end

puts Rational(4, 2).to_simplified_s #=> 2 (whereas Nick Veys's answer outputs "2 0/1")
puts Rational(1, 2).to_simplified_s #=> 1/2
puts Rational(513, 16).to_simplified_s #=> 32 1/16