如果我将元素放在括号中 (python),则乘法为零

multiplication gives zero if I put elements into brackets (python)

如果我在 Python 中做一些普通的计算,就会发生一些非常奇怪的事情。如果我在没有括号的情况下进行乘法运算,它会给出正确的结果,但如果将一些内容放入括号中,则总乘法将变为零。

不信的人(我知道这听起来很奇怪):

>>> print( 1.1*1.15*0.8*171*15625*24*(60/368*0.75)/1000000 )
0.0
>>> print( 1.1*1.15*0.8*171*15625*24*60/368*0.75/1000000 )
7.93546875

如图this Jupyter screenshot.

两个乘法之间的唯一区别是第一个乘法在 60/368*0.75.

两边有括号

这怎么可能,我该怎么办?我不知道这怎么可能。

如果将 ab 中的整数除以 python,则结果是除法的底限,因此如果 a < b 我们得到: floor(a,b)=0

带括号的操作 60/368 给出 0.

但是没有括号,数字 60 首先乘以它之前的所有值,结果是一些 double 值,所以将这个值除以 368 确实不屈服 0.

括号改变求值顺序,里面的表达式先求值。在这里,由于 60 和 368 都是整数文字,因此它们使用 integer division 进行划分 - 意味着只保留 "whole" 部分。由于 60 小于 368,因此它们的整数除法为 0。从那时起,结果很明显 - 您有一系列乘法和除法,其中一个乘数为 0,因此最终结果也为 0.

为防止这种情况,您可以将数字表示为浮点文字 - 60.0 和 368.0。 (好吧,从技术上讲,这里只使用 60.0 就足够了,但为了保持一致性,我建议将所有数字表示为浮点文字)。