说我想找到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
使用科学计数法时得到的答案错误。为什么要这样做,我该如何解决?
答案 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 / 2
,type (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不会以科学计数法给出它。