我目前正在尝试将counts["email"]
包含数字82,000的哈希值除以包含值130万的变量total
。
当我跑puts counts["email"]/total
时,我得到0。
为什么我不能对这些进行分割呢?
答案 0 :(得分:9)
你正在进行分裂,虽然不是你期望的分裂。在Ruby中有许多不同的方法来划分整数:
# Integer division:
5 / 4 # => 1
# Floating point division:
5.fdiv(4) # => 1.25
# Rational division:
5.quo(4) # => Rational(5, 4)
您还可以将其中一个整数转换为Float
或Rational
:
5.to_f / 4 # => 1.25
5.to_r / 4 # => Rational(5, 4)
请注意,首先直接调用fdiv
为faster,而不是调用to_f
,然后使用/
运算符。它还清楚地表明您正在使用浮点除法。
答案 1 :(得分:7)
因为这就是Ruby的工作方式:当你将整数除以整数时,你得到一个整数。在这种情况下,它将为0,因为它是结果的整数部分。
要获得浮动结果,只需告诉Ruby您确实需要浮点数!有很多方法可以做到这一点,我想最简单的只是将其中一个操作数转换为Float ...
puts counts["email"]/total.to_f
答案 2 :(得分:0)
您需要使用浮点数才能获得“完整”结果。
counts["email"] / total.to_f