我刚刚开始学习Python(对不起,不要在这个上做主题,因为它不是)。只是为了给自己做一些有意义的练习来改善语法和功能,我一直在关注这个网址:http://www.cs.washington.edu/homes/stepp/bridge/2007/exercises.html
我通过一些浮点计算得到的这个特殊的“溢出”问题让我感到很困惑。
这是我收到的错误消息:
Traceback (most recent call last):
File "./lab0102.py", line 28, in <module>
payment = PMT(r, n, P)
File "./lab0102.py", line 19, in PMT
return round(P * ((r *((1+r)**num_pmts)) / ((1+r)**num_pmts)))
OverflowError: (34, 'Numerical result out of range')
这是我的代码:
import math
#from decimal import Decimal
def PMT(r, n, P):
rate = (r/100)/12
print "rate:", rate
num_pmts = n*12
payment = P * ((r *((1+r)**num_pmts)) / ((1+r)**num_pmts))
return payment
print "This program computes monthly loan payments."
P = input("Loan Amount? ")
n = input("Number of Years? ")
r = input("Interest Rate? ")
payment = PMT(r, n, P)
print "You payment is", payment
我通过尝试输入类型来完成所有操作,使用一些包装操作来舍入或指定小数点精度。我甚至使用Decimal模块尝试以字符串格式打印出小数,以查看我的逻辑缺陷。
在这篇文章中有任何人在Python中浮点计算领域教育我吗?
答案 0 :(得分:2)
input()
只有在实际看到看起来像浮子的东西时才会给你浮动;如果它看起来像一个整数,那么你将得到一个整数。请改用float(raw_input())
。
现在,关于溢出。
旧版本的Python没有自动将int
提升为long
,这意味着您可以拥有的最大整数为32位或64位;任何高于此值都会导致溢出。由于表达式中有整数(见上文),您可能会突破该类型的最大值,从而导致您看到的异常。