用Wolfram Alpha试试- 这是正确的结果。
用 python 2.7.x 试试:
u = 4/3 * 6.67*1e-11*3.14*6378000*5515
print (u)
答案是 7.36691253546
这里有什么不正确的?
用Wolfram Alpha试试- 这是正确的结果。
用 python 2.7.x 试试:
u = 4/3 * 6.67*1e-11*3.14*6378000*5515
print (u)
答案是 7.36691253546
这里有什么不正确的?
整数除法。4/3
在向下舍入时计算为 1。
改为4.0
强制浮点运算:
>>> 4.0/3 * 6.67*1e-11*3.14*6378000*5515
9.822550047279998
或使用 Python 3,其中浮点除法是默认设置,或使用from __future__ import division
在 Python 2 中实现相同:
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
此行为记录在二进制算术运算符部分下:
(
/
除法) 和//
(地板除法) 运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数;结果是数学除法的结果,“地板”函数应用于结果。除以零引发ZeroDivisionError
异常。
请参阅PEP 238,了解为什么在 Python 3 中更改了此行为,以及对该from __future__ import division
语句的引用。
4/3
问题是Python 2.7中的整数除法
>>> print (4.0/3) * 6.67*1e-11*3.14*6378000*5515
9.82255004728
在 Python 3 中(/
浮点除法和//
整数除法在哪里)这可以在不将其更改为 的情况下工作4.0/3
,或者您可以使用
from __future__ import division