|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
众所周知,decimal模块可以让计算更准确
我编写了一些代码,这个代码中有一个模块,模块根据加法法则计算 a + b 的结果
不要问我为什么不直接用加号(ry
代码如下:
- def plus(a,b):
- if a > 0 and b > 0:
- return a,'+',b,'=',abs(a)+abs(b)
- if a < 0 and b < 0:
- return '(',a,') + (',b,')=',-(abs(a)+abs(b))
- if a > 0 and b < 0:
- if abs(a) > abs(b):
- return a,'+ (',b,') =',a - abs(b)
- else:
- return a,'+ (',b,')=',-(abs(b) - a)
- if a < 0 and b > 0:
- if abs(a) > abs(b):
- return '(',a,') +',b,'=',-(abs(a) - b)
- else:
- return '(',a,') +',b,'=',b - abs(a)
- if a == 0:
- return a,'+',b,'=',b
- if b == 0:
- return a,'+',b,'=',a
- print(*plus(1,1)) #一和一相加,应得二
复制代码
计算0.1 + 0.2的返回值是:
- 0.1 + 0.2 = 0.30000000000000004
复制代码
为了让计算更准确,我使用了decimal模块:
- from decimal import Decimal
- def plus(a,b):
- a = Decimal(a)
- b = Decimal(b)
- if a > 0 and b > 0:
- return a,'+',b,'=',abs(a)+abs(b)
- if a < 0 and b < 0:
- return '(',a,') + (',b,')=',-(abs(a)+abs(b))
- if a > 0 and b < 0:
- if abs(a) > abs(b):
- return a,'+ (',b,') =',a - abs(b)
- else:
- return a,'+ (',b,')=',-(abs(b) - a)
- if a < 0 and b > 0:
- if abs(a) > abs(b):
- return '(',a,') +',b,'=',-(abs(a) - b)
- else:
- return '(',a,') +',b,'=',b - abs(a)
- if a == 0:
- return a,'+',b,'=',b
- if b == 0:
- return a,'+',b,'=',a
- print(*plus(0.1,0.2)) #0.1和0.2相加,应得0.3
复制代码
结果返回的值是:
- 0.1000000000000000055511151231257827021181583404541015625 + 0.200000000000000011102230246251565404236316680908203125 = 0.3000000000000000166533453694
复制代码
怎么越来越不准了(
把变量变成字符串不是直接加上引号,而是用 str(a) 或者 f'{a}'
修改后的代码:
- from decimal import Decimal
- def plus(a,b):
- a = Decimal(f'{a}')
- b = Decimal(f'{b}')
- if a > 0 and b > 0:
- return a,'+',b,'=',abs(a)+abs(b)
- if a < 0 and b < 0:
- return '(',a,') + (',b,')=',-(abs(a)+abs(b))
- if a > 0 and b < 0:
- if abs(a) > abs(b):
- return a,'+ (',b,') =',a - abs(b)
- else:
- return a,'+ (',b,')=',-(abs(b) - a)
- if a < 0 and b > 0:
- if abs(a) > abs(b):
- return '(',a,') +',b,'=',-(abs(a) - b)
- else:
- return '(',a,') +',b,'=',b - abs(a)
- if a == 0:
- return a,'+',b,'=',b
- if b == 0:
- return a,'+',b,'=',a
- print(*plus(0.1,0.2)) #0.1和0.2相加,应得0.3
复制代码
|
|