首页 > 编程语言 >python数据精度问题

python数据精度问题

时间:2022-08-30 00:45:32浏览次数:54  
标签:python Decimal len a1 m1 m2 print 数据 精度

一、python运算时精度问题:

1.运行时精度问题
在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和十进制之间对应问题会导致数值的精度问题,比如无法用有限个二进制位完整地表示0.1,因为0.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 r

res = multiple(1.1,2.2)
print(res)

查看运行结果:

 

二、python四舍五入时精度问题:

1.使用round与浮点数格式化时候的精度问题

归根结底是计算机存储浮点数的问题

a1 = 0.235
a2 = round(a1,2)
a3 = '%.2f' % a1
print(a2)
print(a3)

查看运行结果:

 2.解决方案,使用Decimal函数

需要将float转换为Decimal,该类可以通过接受字符串(务必是字符串)形式的浮点数实现相对精确的小数计算(减缓了精度误差,但没有消灭)

from decimal import Decimal

a1 = 0.235
a2 = Decimal(str(a1)).quantize(Decimal("0.00"))
a3 = '{:.2f}'.format(Decimal(str(a1)))
print(a2)
print(a3)

查看运行结果:

标签:python,Decimal,len,a1,m1,m2,print,数据,精度
From: https://www.cnblogs.com/mrwhite2020/p/16637914.html

相关文章

  • Java入门-基础语法(数据类型)
    数据类型:强类型语言要求变量的使用严格符合规定,所有的变量都必须先定义后才能使用,是最基本的存储单元,其要素包括变量名、变量类型和作用域,安全性高,速度相对较慢。typevar......
  • python学习Day55
    Day55今日内容概要一.jQuery更多操作1.筛选器方法2.操作标签3.jQuery事件4.jQuery动画效果二.Bootstrap页面框架今日内容详细一.jQuery其他操作1.筛选器方......
  • 算法提高课 第四章 数据结构之并查集
    一、并查集1250.格子游戏思路O(mlog(n))将图中的每个点看作并查集的结点,每个被画的边看作合并相邻的点的操作将图中所有点按行或列优先,从1~n*m进行编号每次进行......
  • 【Perl】常见数据结构与算法
    #二分查找usestrict;subbinary_search{my($target,@v)=@_;my$left=0;my$right=@v-1;while($left<$right){my$mid=......
  • python列题(定时器|搜索框)
    尝试编写JS时间案例 1.页面定时器案例 有一个input框两个按钮一个开始一个结束 1.点击开始按钮input内展示当前时间并按秒数刷新2.点击结......
  • 数据传输格式XML和JSON
    XML:可扩展标记语言格式臃肿,解析麻烦,需要用到第三库 JSON:JavaScript对象表示法都是字符串,解析简单 JSON可支持的数据类型只有六种数值、字符串、布尔值、null、对......
  • 大数据技术Flume框架详解
    Flume的概述Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。高可用(HA)flume框架(故障转移机制)高......
  • Vue面试题之如何解决vue第一次加载的时候 页面上使用的数据会闪烁?
    引起数据闪烁的原因:界面加载的时候会把节点直接挂载到文档树中,导致{{msg+"666"}}这个字符串会显示一下,vue对象生成data数据时候回去刷新界面把{{msg+"666"}}字符串替换成......
  • Python爬虫-Xpath语法与lxml库的用法(二)
    一、安装pip方式安装pipinstalllxml二、Xpath术语2.1节点在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML文档......
  • 学习python-Day49
    今日内容作业尝试编写JS时间案例 页面定时器案例 有一个input框两个按钮一个开始一个结束 1.点击开始按钮input内展示当前时间并按秒数刷新......