尝试使用Wolphram Alpha - 这是正确的结果。
尝试使用python 2.7.x:
u = 4/3 * 6.67*1e-11*3.14*6378000*5515
print (u)
答案是7.36691253546
这里有什么不对?
答案 0 :(得分:6)
整数除法。 <{1}}在向下舍入时评估为1。
使用4/3
代替强制浮点运算:
4.0
或使用Python 3,其中浮点除法是默认值,或者使用>>> 4.0/3 * 6.67*1e-11*3.14*6378000*5515
9.822550047279998
在Python 2中实现相同的目标:
from __future__ import division
此行为记录在Binary arithmetic operators section:
下
Python 2.7.5 (default, May 22 2013, 12:00:45) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from __future__ import division >>> 4/3 * 6.67*1e-11*3.14*6378000*5515 9.822550047279998
(除法)和/
(地板除法)运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数;结果是数学除法的结果,“floor”函数应用于结果。除以零会引发//
异常。
请参阅PEP 238,了解在Python 3中更改此行为的原因,以及对ZeroDivisionError
语句的引用。
答案 1 :(得分:3)
问题是Python 2.7中的整数除法4/3
>>> print (4.0/3) * 6.67*1e-11*3.14*6378000*5515
9.82255004728
在Python 3中(其中/
是浮动除法而//
是整数除法)这可以在不将其更改为4.0/3
的情况下工作,或者您可以使用
from __future__ import division