1

データベースで小数の繰り返しを表現する良い方法は何ですか?

2.81818181繰り返し

アイデア1

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、 2 つの整数を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

2 番目のアプローチでは、10 進数の繰り返しが常に生成されるとは限りません。a が b の倍数である場合にどうなるかを考えてみてください。

分数を使用するというアイデアは最高です。アプローチを少し変更する必要があります。

  • 繰り返し数の整数部分をランダムに生成します
  • 繰り返しを表す別の乱数整数を生成します
  • 通常の式を使用して、これらの 2 つの数値を分数に変換します。
于 2013-08-18T08:34:41.427 に答える
0
rand = rand(100)

3回{ print rand.to_s }

于 2013-08-18T08:17:49.750 に答える