为什么浮点数的余数除以一个比它本身更大的整数 returns 浮点数本身?

Why the remainder of a float divided by a bigger integer than itself returns the float itself?

我对编程概念完全陌生我正在学习 ruby 目前!

我玩了一下 irb,看到一个浮点数除以一个比它本身大的整数的余数 return 浮点数本身。 例如 2.5 % 5 returned 2.5.

我期望上述等式的结果是 0 因为如果我们将 2.5 除以 5 答案将是 0.5 余数 0.

你能帮我理解为什么会这样吗,或者我在数学上是错误的吗? 提前致谢

% - 是模运算符 (在计算中,模运算求一个数除以另一个数后的余数(称为运算的模数) 在您的情况下,这是正确的: 2.5% 5 = 2.5

/ - 是除法 2.5 / 5 = 0.5

只要您将一个数字包含为浮点数,在本例中为 2.5,即使另一个数字是字符串,Ruby 也会自动将结果转换为浮点数。

希望对您有所帮助, 奥古斯塔斯

你在数学上是错误的:2.5 除以 5 而不是 5。即0.5。或者,如果您谈论的是 "integer division"(即结果始终为整数的除法),则结果为 00 * 2.50,因此,余数是 2.5.

实际上,对于 任何 对数字 ab 都是如此,其中 b > aa % b == a

Numeric#% 的文档指出:“x.modulo(y) 表示 x-y*(x/y).floor”。在您的示例中,这意味着:

2.5 % 5
  #=> 2.5 - 5*(2.5/5).floor
  #=> 2.5 - 5*(0.5.floor) => 2.5 - 5 * 0 => 0.5

再考虑四个例子。

9 % 2.0
  #=> 9 - 2.0*(9/2.0).floor
  #=> 9 - 2.0*(4.5.floor) => 9 - 2.0*4 => 1.0
9.0 % 2
  #=> 9.0 - 2*(9.0/2).floor
  #=> 9.0 - 2*(4.5.floor) => 9.0 - 2.0*4 => 1.0
9.0 % 2.0
  #=> 9.0 - 2.0*(9.0/2.0).floor
  #=> 9.0 - 2.0*(4.5.floor) => 9.0 - 2.0*4 => 1.0
9 % 2
  #=> 9 - 2*(9/2).floor
  #=> 9 - 2*(4.floor) => 9 - 2*4 => 1

Float#%(又名 Float#modulo)的文档给出了另外两个示例:

6543.21 % 137
  #=> 6543.21 - 137*((6543.21/137).floor)
  #=> 6543.21 - 137*(47.76065693430657.floor)
  #=> 6543.21 - 137*47
  #=> 104.21000000000004 
6543.21 % 137.24
  #=> 6543.21 - 137.24*((6543.21/137.24).floor)
  #=> 6543.21 - 137.24*(47.67713494607986.floor)
  #=> 6543.21 - 137.24*47
  #=> 92.92999999999961