我最近在学习超高精度数字的加减法(比如精确到小数点后100位),于是我写了一个函数来计算,代码如下。如有其它缺陷,请各位大神帮忙指出。
import math
def DoublePlus(*pluser):
#检测传入的加数是不是小数
pluser=list(pluser)
m=0
for i in pluser:
pluser[m]=str(i)
m=m+1
print(pluser)
m=0
for i in pluser:
m=m+1
print(i.find('.'))
if not (i.find('.')==-1):
pass
else:
raise ValueError ("在第"+str(m)+"个加数中不是小数")
#通过竖式的方式进行加法运算
#共进行pluser的长度-1次循环
for index in range(len(pluser)-1):
x=pluser[index]#加数1
y=pluser[index+1]#加数2
print(math.floor(int(x)))
x_integer_part=math.floor(int(x))#加数1的整数部分
y_integer_part=math.floor(int(y))#加数2的整数部分
#取x和y的小数部分
x_point=x.find('.')
x_decimal_part=int('0'+x[x_point::])
y_point=y.find('.')
x_decimal_part=int('0'+y[y_point::])
#开始计算(小数部分 )
#位数少的补0
if len(x_decimal_part)>len(y_decimal_part):
poor=x_decimal_part-y_decimal_part
y_decimal_part=y_decimal_part+'0'*poor
elif len(y_decimal_part)>len(x_decimal_part):
poor=y_decimal_part-x_decimal_part
x_decimal_part=x_decimal_part+'0'*poor
else:
pass
#倒序
x_decimal_part=x_decimal_part[::-1]
y_decimal_part=y_decimal_part[::-1]
#初始没有进位
carry=False
if __name__=='__main__':
DoublePlus(15.685,2.1,3.1,4.1)
但是print(math.floor(int(x)))
这一行老是报错,说:ValueError: invalid literal for int() with base 10: '15.685',虽然能看懂,但不知道如何解决,Python2的string库在3中已经无法使用了,实在不知道如何解决,求各位大神帮忙解决,感谢!