1

用Wolfram Alpha试试- 这是正确的结果。

用 python 2.7.x 试试:

u = 4/3 * 6.67*1e-11*3.14*6378000*5515
print (u)  

答案是 7.36691253546

这里有什么不正确的?

4

2 回答 2

6

整数除法。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语句的引用。

于 2013-06-21T09:54:59.590 回答
3

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
于 2013-06-21T09:55:08.613 回答