使用 postgresql 在 rails 控制台中计算一个简单的小数

Calculating a simple decimal in rails console using postgresql

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

y = @somespecificrecord

然后...

y.up_vote_count

这returns 1 符合预期

y.down_vote_count

这returns 1 符合预期

y.total_vote_count

这 returns 2 符合预期。

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

y.up_vote_count / y.total_vote_count

这个 returns 0 应该 return .50。我一直在阅读有关 floats/integers/decimals 等内容的文章,我确实在我正在使用的模型的架构中看到了这一点:

t.float "value", default: 0.0

这是我的问题吗?...如果是这样,我必须做些什么才能让自己在 rails 控制台中做一个简单的公式,如上面的公式,这将 return 正确小数点四舍五入为 2 位数字(即上例中的 .50)。我不知道我是否想要 运行 任何迁移来更改数据类型,因为这是一个 gem(作为初学者,我倾向于远离任何 gem 的自定义代码我在用着)。还有别的办法吗?我希望缺少一些小东西?

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

感谢您的帮助。

1 / 2 = 0.5 

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

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

y.up_vote_count / y.total_vote_count.to_f

Float

Float objects represent inexact real numbers using the native architecture's double-precision floating point representation.

Floating point has a different arithmetic and is an inexact number.

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

up_votes   = y.up_vote_count.to_f 
total_vote = y.down_vote_count.to_f

(up_votes / total_vote) * 100.0

希望对您有所帮助