在数据库中表示重复小数的好方法是什么?
示例2.818181
,81
重复
将2.818181
分隔为非重复和重复的部分,然后non_repeat = 2.0
和repeat = .007
class Decimal < ActiveRecord::Base
attr_accessible :non_repeat, :repeat #floats
def to_f
to_s.to_f
end
def to_s
"#{non_repeat + repeat}#{repeat.to_s.gsub(/0\./, '') * 3}" #approximation
end
def self.random_new
a = rand(100)
b = rand(100) / 100.0
self.new(non_repeat: a, repeat: b)
end
end
使用分数,这意味着将2.818181
转换为31/11
,保存两个整数31
和11
class Decimal < ActiveRecord::Base
attr_accessible :numerator, :denominator #integers
def to_f
numerator / denominator
end
def to_s
to_f.to_s
end
def self.random_new
a = rand(100)
b = random_prime(...) # like 7, 9, 11
self.new(numerator: a, denominator: b)
end
end
为了随机生成重复小数,哪个想法更好?或者还有另一种方式吗?
答案 0 :(得分:1)
你的第二种方法并不总是产生重复的十进制数,只要想想如果a是b的倍数会发生什么。
使用分数的想法是最好的。您需要稍微改变一下方法:
答案 1 :(得分:0)
rand = rand(100)
3.times { print rand.to_s }