[英]Wrong answer with equation in python
與Wolphram 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
異常。
有關為什么在Python 3中更改了此行為的信息,請參見PEP 238 ,以獲取對from __future__ import division
語句的引用。
問題是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.