🚀 小程序开发定制优质资源分享 🚀
小程序开发定制学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
进阶级 | 本课程是python flask+小程序开发定制微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 | |
入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
一、python运算时精度问题:
1.运行时精度问题在Python中(其他语言中也存在这个问题,这是计算机采用导致的),有时候由于二进制和十进制之间对应问题会导致数值的精度问题,比如无法用有限个二进制位完整地表示0.1,因为0.1转化为二进制之后位一个无限循环小数
| 1 | print(1.1*2.2)
|
查看运行结果:
2.解决方案:添加方法
需要将整数部分与小数部分单独做处理可以解决
def multiple(m1, m2): r='' ## 若存在浮点型,则先转化为整数 if type( m1 )==float or type( m2 )==float: print( "存在浮点数" ) len\_m1=len( str( m1 ).split( "." )[1] ) len\_m2=len( str( m2 ).split( "." )[1] ) print( "m1的小数位:", len\_m1 ) print( "m2的小数位:", len\_m2 ) m1=int( 10**len\_m1*m1 ) m2=int( 10**len\_m2*m2 ) print( "m1化为整数:", m1 ) print( "m2化为整数:", m2 ) r=str( m1*m2 ) print( "r:", r ) l=len\_m1+len\_m2 print( "l的总长度:", l ) if l<len( r ): r\_front=r[:-l] r\_last=r[-l:] print( r\_front, "-", r\_last ) r=r\_front+"."+r\_last else: r="0."+(l-len( r ))*"0"+r else: print( "不存在浮点数" ) r=m1*m2 return rres = multiple(1.1,2.2)print(res)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
查看运行结果:
二、python四舍五入时精度问题:
1.使用round与浮点数格式化时候的精度问题
归根结底是计算机存储数的问题
a1 = 0.235a2 = round(a1,2)a3 = '%.2f' % a1print(a2)print(a3)
- 1
- 2
- 3
- 4
- 5
查看运行结果:
2.解决方案,使用Decimal函数
需要将float转换为Decimal,该类可以通过接受(务必是字符串)形式的浮点数实现相对精确的小数计算(减缓了精度误差,但没有消灭)
from decimal import Decimala1 = 0.235a2 = Decimal(str(a1)).quantize(Decimal("0.00"))a3 = '{:.2f}'.format(Decimal(str(a1)))print(a2)print(a3)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
查看运行结果: