使用 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
希望对您有所帮助
好的...我想我在这里遗漏了一些非常明显的东西,但我自己 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
希望对您有所帮助