我有一个名为value
的变量。该值将转换为Rational
对象。我需要将它简化为混合分数。我想知道如何简化分数。例如,我想将513/16
转换为32 1/16
。
我的代码如下所示:
value = ...
value = value.to_r #=> (1/12)
答案 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