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

Zac*_*iro 5 ruby math division fixnum

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

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

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

Mar*_*une 9

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

# Integer division:
5 / 4     # => 1

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

# Rational division:
5.quo(4)  # => Rational(5, 4)
Run Code Online (Sandbox Code Playgroud)

您还可以将一个整数转换为a Float或a Rational:

5.to_f / 4 # => 1.25
5.to_r / 4 # => Rational(5, 4)
Run Code Online (Sandbox Code Playgroud)

请注意,首先fdiv直接调用比调用然后使用运算符更快.它还清楚地表明您正在使用浮点除法.to_f/


rai*_*7ow 7

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

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

puts counts["email"]/total.to_f
Run Code Online (Sandbox Code Playgroud)

  • 不只是Ruby,这是大多数编程语言的行为!将分母转换为浮点数也不是解决这个问题的唯一方法.如果需要数学精确度,`Rational(计数["电子邮件"],总计)`将是优越的.请注意,`Rational`位于1.9之前版本的标准库中. (3认同)