【问题标题】:Generating Random Fixed Decimal in Rails在 Rails 中生成随机固定小数
【发布时间】:2012-11-22 02:39:54
【问题描述】:

我正在尝试在我的 rails 应用程序中生成随机数据。 但是我遇到了十进制金额的问题。我收到一个错误 说范围的价值不高。

while $start < $max
        $donation = Donation.new(member: Member.all.sample, amount:  [BigDecimal('5.00')...BigDecimal('200.00')].sample,
                                 date_give: Random.date_between(:today...Date.civil(2010,9,11)).to_date,
                                 donation_reason: ['tithes','offering','undisclosed','building-fund'].sample )
        $donation.save
        $start +=1
      end

【问题讨论】:

    标签: ruby-on-rails ruby random decimal currency


    【解决方案1】:

    如果您想要两个数字之间的随机小数,则不适合使用 sample。相反,请执行以下操作:

    random_value = (200.0 - 5.0) * rand() + 5
    

    另外两个建议:
    1. 如果你实现了这个,很好,但它看起来不标准Random.date_between(:today...Date.civil(2010,9,11)).to_date
    2. $variable 表示 Ruby 中的全局变量,所以你可能不想要那个。

    更新 --- 真正获得随机日期的方法

    require 'date'
    
    def random_date_between(first, second)
      number_of_days = (first - second).abs
      [first, second].min + rand(number_of_days)
    end
    
    random_date_between(Date.today, Date.civil(2010,9,11))
    => #<Date: 2012-05-15 ((2456063j,0s,0n),+0s,2299161j)>
    random_date_between(Date.today, Date.civil(2010,9,11))
    => #<Date: 2011-04-13 ((2455665j,0s,0n),+0s,2299161j)>
    

    【讨论】:

    • 我已经尝试过你的方法,但它仍然给我同样的错误。至于 date_between 我是通过查看源代码中的单元测试得到的。
    • 上面的代码不会给你报错。 Random data-between 很可能是问题的真正原因
    • 你有一个应该如何实现 date_between 的例子吗?
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2010-10-11
    • 2019-01-02
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多