Ruby 为什么可以';我不能把一个fixnum除以另一个fixnum吗?

Ruby 为什么可以';我不能把一个fixnum除以另一个fixnum吗?,ruby,math,division,fixnum,Ruby,Math,Division,Fixnum,我目前正在尝试将counts[“email”]一个包含数字82000的哈希值除以一个包含值130万的变量total 当我运行put counts[“email”]/total时,我得到0 为什么我不能对这些进行除法?您需要使用浮点数才能获得“完整”结果 因为Ruby就是这样工作的:当你把整数除以整数,你得到一个整数。在本例中为0,因为它是结果的整数部分 要得到浮点结果,只需告诉Ruby您实际上需要一个浮点!有很多方法可以实现,我想最简单的方法就是将一个操作数转换成浮点 puts counts["

我目前正在尝试将
counts[“email”]
一个包含数字82000的哈希值除以一个包含值130万的变量
total

当我运行
put counts[“email”]/total时,我得到0


为什么我不能对这些进行除法?

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


因为Ruby就是这样工作的:当你把整数除以整数,你得到一个整数。在本例中为0,因为它是结果的整数部分

要得到浮点结果,只需告诉Ruby您实际上需要一个浮点!有很多方法可以实现,我想最简单的方法就是将一个操作数转换成浮点

puts counts["email"]/total.to_f

您正在执行除法,尽管不是您期望的除法。Ruby中有许多不同的整数除法:

# Integer division:
5 / 4     # => 1

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

# Rational division:
5.quo(4)  # => Rational(5, 4)
您还可以将一个整数转换为
浮点
有理

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

请注意,首先直接调用
fdiv
比调用
到f
然后使用
/
操作符更有效。它还清楚地表明您正在使用浮点除法。

如果两个操作数都是整数,Ruby将执行整数除法:不仅仅是Ruby,这是大多数编程语言的行为!将分母转换为浮点也不是解决这个问题的唯一方法。如果需要数学精度,
Rational(counts[“email”],total)
将更优越。请注意,
Rational
在1.9之前的版本中位于标准库中。我想问题在于语言是动态类型的还是静态类型的。Perl、JavaScript和PHP(我使用最多的语言)会在这里打印浮点值,即使后者是“float”类型。Ruby和Python 2.7(不是Python 3)是动态类型的语言,整数除法的结果是整数商而不是浮点。不知怎的,我不知道他们在Python 3中改变了它。。。太棒了。@raina77ow:Ruby和Python是动态的强类型,而PHP、Perl和JavaScript是动态的弱类型。请对-1进行评论。
5.to_f / 4 # => 1.25
5.to_r / 4 # => Rational(5, 4)