[英]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.