python数据精度问题
一、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数据精度问题的更多相关文章
- Django学习笔记(7)——单表操作和多表操作
单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...
- python(数据精度处理)
一.取整处理 1.int() 向下取整 内置函数 1 n = 3.75 2 print(int(n))>>> 3 3 n = 3.25 4 print(int(n))>> ...
- Python浮点数数据精度控制
代码 import decimal from decimal import Decimal, getcontext if __name__ == '__main__': decimal.getcont ...
- 小猪猪逆袭成博士之C++基础篇(一)数据精度、强制类型转换、变量命名规则
小猪猪逆袭成博士之C++基础篇(一) 关键词: 数据精度.强制类型转换.变量命名规则 综述: 1.大多数编程语言通过两种方式来进一步补充其特征:一是赋予程序员自定义数据类型的权利(C++中的类):二是 ...
- 洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
decimal 1.作用: 用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于 金融应用和其它需要精确十进制表达的场合,控制精度,控制舍入以适应法律或者规定要求,确保十进制数位精度, ...
- python selenium自动化常用关键字
工具安装: 1.安装python 2.安装selenium库(dos命令下进入selenium-2.53.2存放路径,执行pip install selenium-2.53.2) 3.将浏览器驱动放到 ...
- 通过Python包来剪枝、蒸馏DNN
用 Distiller 压缩 PyTorch 模型 作者: PyTorch 中文网发布: 2018年7月15日 5,101阅读 0评论 近日,Intel 开源了一个用于神经网络压缩的开源 Python ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
随机推荐
- Java使用类-String
String,StringBuffer,StringBuild 大佬的理解-><深入理解Java中的String> 1.String 1.1 String 实例化 String st ...
- Aeraki Mesh正式成为CNCF沙箱项目,腾讯云携伙伴加速服务网格成熟商用
6月,由腾讯云主导,联合百度.灵雀云.腾讯音乐.滴滴.政采云等多家合作伙伴发起的服务网格开源项目 Aeraki Mesh 通过了全球顶级开源基金会云原生计算基金会(CNCF)技术监督委员会评定,正式成 ...
- 重学ES系列之拓展运算符
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- FTP安装及使用
通过网络传输数据的手段 1. ssh 2. http 3. nfs 4. rsync 5. ftp 6. samba ftp的简介: 1. ftp是应用层协议,是基于TCP 2. 使用21端口 FTP ...
- Mybatis+SpringBoot 项目All elements are null
xml文件内容如下 查出来的集合长度是有的,但是会出现All elements are null 解决方案: 注意我的xml文件全部是这样的,并且我调用的sql返回值是 resultType=&qu ...
- CRM汇客 牛刀小试 5个BUG修复
1.权限管理-用户管理-高级搜索-手机号搜索不可用 1.1现象 1.2解决思路 1.2.1 定位接口 接口名:system/user/list 请求方式:GET请求 1.2.3 确定bug所在位置 b ...
- java中的内存划分和一个数组的内存图
内存概述 内存是计算机中的重要原件,临时存储区域,作用是运行程序.我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存 Java虚拟机要运行程序 ...
- 官宣!微软发布 VS Code Server!
北京时间 2022 年 7 月 7 日,微软在 VS Code 官方博客中宣布了 Visual Studio Code Server! 远程开发的过去与未来 2019 年,微软发布了 VS Code ...
- 5-15 Virtual 虚拟机
虚拟机基本使用 Virtualbox安装流程 RockyLinux VirtualBox清华大学个版本下载路径 https://mirrors.tuna.tsinghua.edu.cn/virtual ...
- js基础学习-正则表达式
正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. 定义的方法: var patt = new RegExp(pattern, modifiers) // var patt ...