1

在数据库中表示重复小数的好方法是什么?

例如2.81818181重复

理念一

分成2.818181不重复和重复的部分,然后non_repeat = 2.0repeat = .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

使用分数,这意味着2.818181变成31/11,保存两个整数3111

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

为了随机生成重复小数,哪个想法更好?还是有其他方法?

4

2 回答 2

1

您的第二种方法不会总是生成重复的十进制数,只要想想如果 a 是 b 的倍数会发生什么。

使用分数的想法是最好的。你需要稍微改变你的方法:

  • 随机生成重复数字的整数部分
  • 生成另一个随机整数,表示重复
  • 使用常用公式将这两个数字转换为分数
于 2013-08-18T08:34:41.427 回答
0
rand = rand(100)

3次{ print rand.to_s }

于 2013-08-18T08:17:49.750 回答