为什么ruby和python数学计算是不同的

时间:2017-08-01 05:23:07

标签: python ruby math

2 + 2 / - 7 * - 7 * 8 - 5 + 7 * -3

Python像这样计算这个表达式:

2+2/-7*-7*8-5+7*-3 == -8.0
# True

和Ruby一样:

2+2/-7*-7*8-5+7*-3 == 32
# => true

但正确的答案是-8

我哪里错了?为什么Ruby结果与Python不同?

3 个答案:

答案 0 :(得分:12)

这个例子更简单:

在Ruby(和Python 2.x)中,1/2 == 0。在Python 3.x中,它是0.5

正在发生的事情是,在Ruby和Python 2中,两个整数之间的/执行整数除法(将真实结果置于底层)。

以下内容将在Ruby中为您提供-8。请注意2.0,使其成为浮点值:

2+2.0/-7*-7*8-5+7*-3

答案 1 :(得分:9)

在Python中

>>> 2+2/-7*-7*8-5+7*-3 == -8.0
True

因为/执行浮点除法。

但在Ruby中/表示整数除法。

要使Python像Ruby一样工作,您需要使用//

打破它:

在Python中:

2+2/-7*-7*8-5+7*-3
  = 2 + 2 / (-7) * (-7) * 8 - 5 + 7 * (-3)
  = 2 + 2 / (-7) * (-7) * 8 - 5 + 7 * (-3)
  = 2 + (-0.2857142857142857) * (-7) * 8 - 5 + 7 * (-3)
  = 2 + 2.0 * 8 - 5 + 7 * (-3)
  = 2 + 16.0 - 5 + 7 * (-3)
  = 2 + 16.0 - 5 + 7 * (-3)
  = 2 + 16.0 - 5 + (-21)
  = -8.0

在Ruby中,

2+2/-7*-7*8-5+7*-3
  = 2 + 2 / (-7) * (-7) * 8 - 5 + 7 * (-3)
  = 2 + (-1) * (-7) * 8 - 5 + 7 * (-3)
  = 2 + 7 * 8 - 5 + 7 * (-3)
  = 2 + 56 - 5 + 7 * (-3)
  = 58 - 5 + (7 * -3)
  = 53 + (7 * -3)
  = 53 + (-21)
  = 32

基本上在Ruby(和旧的Python,即Python 2)中:

2 / (-7)   ==  -1

在Python中(即Python 3,已经在SINCE 2008 ):

2 / (-7)   ==  -0.2857142857142857
2 // (-7)  ==  -1

正如所指出的那样,正确地说,在评论中,有一个旧版本的Python叫做Python 2(人们今天仍在使用!),/就像在Ruby中一样。

虽然许多人都在等待Python 2死亡,但它仍然存在(并且仍然很好),所以,是的,最好是对Python 2和Python 3进行限定。从问题中可以清楚地看出OP正在使用不合格的术语" Python"适用于Python 3,它在一个完美的世界中,将是我们都可以说的。毕竟,有没有人使用Python" 1"? : - )

答案 2 :(得分:0)

我会回答你的第一个问题。

假设您的Python和Ruby报告是正确的,显然,只有一个地方可以作为您问题的答案:"我错在哪里?"。也就是说,

  

但正确答案是-8。

正如您已经确认的那样,您的Python环境的正确答案是-8.0,而对于您的Ruby环境,它是32