如果我将元素放在括号中 (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
.
两边有括号
这怎么可能,我该怎么办?我不知道这怎么可能。
如果将 a
、b
中的整数除以 python,则结果是除法的底限,因此如果 a < b
我们得到:

带括号的操作 60/368
给出 0
.
但是没有括号,数字 60
首先乘以它之前的所有值,结果是一些 double 值,所以将这个值除以 368
确实不屈服 0
.
括号改变求值顺序,里面的表达式先求值。在这里,由于 60 和 368 都是整数文字,因此它们使用 integer division 进行划分 - 意味着只保留 "whole" 部分。由于 60 小于 368,因此它们的整数除法为 0。从那时起,结果很明显 - 您有一系列乘法和除法,其中一个乘数为 0,因此最终结果也为 0.
为防止这种情况,您可以将数字表示为浮点文字 - 60.0 和 368.0。 (好吧,从技术上讲,这里只使用 60.0 就足够了,但为了保持一致性,我建议将所有数字表示为浮点文字)。
如果我在 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
.
这怎么可能,我该怎么办?我不知道这怎么可能。
如果将 a
、b
中的整数除以 python,则结果是除法的底限,因此如果 a < b
我们得到:
带括号的操作 60/368
给出 0
.
但是没有括号,数字 60
首先乘以它之前的所有值,结果是一些 double 值,所以将这个值除以 368
确实不屈服 0
.
括号改变求值顺序,里面的表达式先求值。在这里,由于 60 和 368 都是整数文字,因此它们使用 integer division 进行划分 - 意味着只保留 "whole" 部分。由于 60 小于 368,因此它们的整数除法为 0。从那时起,结果很明显 - 您有一系列乘法和除法,其中一个乘数为 0,因此最终结果也为 0.
为防止这种情况,您可以将数字表示为浮点文字 - 60.0 和 368.0。 (好吧,从技术上讲,这里只使用 60.0 就足够了,但为了保持一致性,我建议将所有数字表示为浮点文字)。