小程序开发定制python数据精度问题

🚀 小程序开发定制优质资源分享 🚀

小程序开发定制学习路线指引(点击解锁)知识定位人群定位
进阶级本课程是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

查看运行结果:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发