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 ...
随机推荐
- 开发工具-SQL Server官方下载地址
更新记录 2022年6月10日 完善标题. https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 相关链接: SSMS下载地址 ...
- 4.使用CFileDialog打开文件对话框,获得文件路径 -windows编程
引言:没想到2022年还有很多工业软件公司依然使用MFC,微软也一直在更新MFC的库,这次使用MFC封装的CFileDialog类,写一个获得选定文件路径,名称,扩展名的程序. 个人技术博客(文章整理 ...
- 【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码
Zookeeper3.7源码剖析 能力目标 能基于Maven导入最新版Zookeeper源码 能说出Zookeeper单机启动流程 理解Zookeeper默认通信中4个线程的作用 掌握Zookeepe ...
- hive完整搭建
安装 MySQL 服务的详细步骤如下: 1. 解压安装包 现在已经为大家下载好了 MySQL 5.7.25 的安装包,存放在 /root/software 目录下.首先进入此目录下,然后使用tar - ...
- 我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:一个Bug 没想到一个Bug,竟然搞我两次! 我大抵是卷上瘾了,横竖都睡不着,坐起来 ...
- bat-进程与服务
进程 tasklist 查看进程表 关闭进程 taskkill /PID xxx taskkill -f -im unm* taskkill -f -im ice* 服务 **net** net命令不 ...
- windows10 安装MySQL ZIP版本
今天重新学习了一下MySQL,但是呢刷题网站不知道为什么很卡,输入容易卡死崩溃,于是乎想在win10上面进行安装进行练习. 发现电脑里面没有,于是进行安装. 1.首先下载MySQL https://d ...
- JDBC:Statement问题
1.Statement问题 2.解决办法:通过PreparedStatement代替 实践: package com.dgd.test; import java.io.FileInputStrea ...
- 大家好,我是UCMP云管家,这是我的自我介绍
随着云计算的不断普及,构建在计算.存储.网络.数据库等基础资源之上的云平台逐渐大行其道:而随着多种云平台技术路线的发展成熟,多个云厂商的云平台开始出现在企业IT市场.对于企业而言,为满足成本.按需.隐 ...
- 5-9 Leaf 分布式ID
Leaf 什么Leaf leaf是叶子的意思 我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统 我们可以在Github网站上下载项目直接使用 为什么需要Leaf 上面的图片中 是一个 ...