繁体   English   中英

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

[英]Why ruby and python math calculation are different

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不同?

这个例子更简单:

在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

在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,自2008年以来):

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

正如指出的那样,这也是正确的,在评论中,有一个老版本的Python称为Python 2中(人们仍在使用的今天!)针对/如同它在Ruby中一样。

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

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

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

但正确的答案是-8。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM