Python令人不快地以科学计数法表示了某些数学方程式的答案

时间:2018-11-25 17:03:57

标签: python

说我想找到50 ^ 15的答案。如果我这样输入,它将以科学计数形式给出答案:

>>> 51**(30/2)
4.107264216077056e+25

如果我这样输入,它不会给我科学记号:

>>> 51**15
41072642160770556400888251

我知道它们都代表相同的数字,但这会导致某些数学函数出现问题。例如,使用gcd:

>>> gcd(4.107264216077056e+25+1,77)
1.0

>>> gcd(41072642160770556400888251+1,77)
11

使用科学计数法时得到的答案错误。为什么要这样做,我该如何解决?

3 个答案:

答案 0 :(得分:1)

整数除。

<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.3/fabric.js"></script> <canvas id='c' width="500" height="400"></canvas>from bs4 import BeautifulSoup import requests s = requests.Session() url = 'https://www.nhtsa.gov/vehicle/2017/FORD/ESCAPE/SUV/AWD#safety-ratings-frontal' #url to retrieve data from page = s.get(url).text soup = BeautifulSoup(page, "html.parser") for div in soup.find_all('div'): #lists all image alt text for img in div.find_all('img', alt=True): print(img['alt']) 的结果是浮点数

30 / 2type (30/2)的结果是一个整数。

计算50 ** x时,变量x的类型很重要。如果x为float类型,则结果将为浮点数。如果x为int类型,则结果将为整数

答案 1 :(得分:0)

这是python-2和python-3之间的区别。 在python-3中,常规或经典除法'/'将数字视为浮点数,即使它们是整数也是如此,因此结果也是浮点数。要获得整数结果,您需要使用整数除法运算符或强制转换结果:

>>> 30/2
15.0
>>> 30//2
15
>>> int(30/2)
15
>>> 31/2
15.5
>>> 31//2
15
>>> int(31/2)
15

因此,在您的情况下,请使用51**(30//2)51**int(30/2)

这里的“陷阱”是python中的整数具有无限精度,而浮点数则没有。这意味着您必须在幂运算符降低计算精度之前进行强制转换:

>>> 51**15
41072642160770556400888251
>>> int(51**(30/2))
41072642160770559363776512
>>> 51**int(30/2)
41072642160770556400888251
>>> int(51**(30/2))-(51**int(30/2))
2962888261

在官方教程中了解更多信息: https://docs.python.org/3.1/tutorial/introduction.html#numbers

答案 2 :(得分:0)

30/2是一个浮点数,但是您可以使用int(30/2)对其进行整数化,而python不会以科学计数法给出它。