【问题标题】:Calculating a simple decimal in rails console using postgresql使用 postgresql 在 Rails 控制台中计算简单的小数
【发布时间】:2017-05-15 16:56:02
【问题描述】:

好的...我想我在这里遗漏了一些非常明显的东西,但无法通过这个解决方案搜索自己。我有两个简单的 rails 方法来计算赞成票和反对票的数量。他们总是会返回一个分数,因为我试图显示一个百分比(up_vote_count / votal_vote_count)。我打开 rails 控制台并运行以下命令:

y = @somespecificrecord

那么……

y.up_vote_count

这会按预期返回 1

y.down_vote_count

这会按预期返回 1

y.total_vote_count

这会按预期返回 2。

但是,当我在控制台中运行时...

y.up_vote_count / y.total_vote_count

当它应该返回 0.50 时返回 0。我一直在阅读有关浮点数/整数/小数等的内容,并且确实在我正在使用的模型的架构中看到了这一点:

t.float "value", default: 0.0

这是我的问题吗?...如果是这样,我该怎么做才能让自己在 rails 控制台中执行一个简单的公式,例如上面的公式,它将返回正确的小数,四舍五入为 2 位(即 0.50在上面的这种情况下)。我不知道是否要运行任何迁移来更改数据类型,因为这是一个 gem(作为初学者,我倾向于远离自定义我正在使用的任何 gem 的代码)。还有其他方法吗?希望我错过了什么小东西?

更新: 我正在学习小数也比浮点数慢,所以有什么方法可以通过继续使用 t.float "value" 来实现这一点,默认值:0.0

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 floating-point decimal rails-console


    【解决方案1】:
    1 / 2 = 0.5 
    

    对于整数,这将向下舍入到 0

    您可以通过将除数转换为浮点数来解决此问题,强制它以浮点精度进行除法。

    y.up_vote_count / y.total_vote_count.to_f
    

    【讨论】:

      【解决方案2】:

      浮动

      浮点对象使用本机表示不精确的实数 架构的双精度浮点表示。

      浮点数有不同的算术,是一个不精确的数字。

      重要的是要知道,如果您将 2 个洞号相除,您将得到一个洞号。 如果您正在查看小数,您应该首先将您的数字转换为小数或像这样的“浮点数”

      up_votes   = y.up_vote_count.to_f 
      total_vote = y.down_vote_count.to_f
      
      (up_votes / total_vote) * 100.0
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        • 2014-12-11
        • 2013-05-25
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多