为什么我不能将fixnum除以另一个fixnum?

时间:2012-06-25 21:23:41

标签: ruby math division fixnum

我目前正在尝试将counts["email"]包含数字82,000的哈希值除以包含值130万的变量total

当我跑puts counts["email"]/total时,我得到0。

为什么我不能对这些进行分割呢?

3 个答案:

答案 0 :(得分:9)

你正在进行分裂,虽然不是你期望的分裂。在Ruby中有许多不同的方法来划分整数:

# Integer division:
5 / 4     # => 1

# Floating point division:
5.fdiv(4) # => 1.25

# Rational division:
5.quo(4)  # => Rational(5, 4)

您还可以将其中一个整数转换为FloatRational

5.to_f / 4 # => 1.25
5.to_r / 4 # => Rational(5, 4)

请注意,首先直接调用fdivfaster,而不是调用to_f,然后使用/运算符。它还清楚地表明您正在使用浮点除法。

答案 1 :(得分:7)

因为这就是Ruby的工作方式:当你将整数除以整数时,你得到一个整数。在这种情况下,它将为0,因为它是结果的整数部分。

要获得浮动结果,只需告诉Ruby您确实需要浮点数!有很多方法可以做到这一点,我想最简单的只是将其中一个操作数转换为Float ...

puts counts["email"]/total.to_f

答案 2 :(得分:0)

您需要使用浮点数才能获得“完整”结果。

counts["email"] / total.to_f