Python3 浮点数精度问题
'''
很多语言中都有浮点数数据精度的问题,Python中也是
例如:0.1 + 0.2 应该等于0.3 但结果 事实上是 0.30000000004
首先说原因:1、小数转换成二进制的方法:将小数部分先乘以2,记录整数部分,然后将得到的结果的小数部分乘以2,记录整数部分,直到乘法得到的结果是整数1时停止。实例:0.1的二进制计算方法如下0.1*2=0.2 00.2*2=0.4 00.4*2=0.8 00.8*2=1.6 10.6*2=1.2 10.2*2=0.4 00.4*2=0.8 00.8*2=1.6 10.6*2=1.2 10.2*2=0.4 00.4*2=0.8 00.8*2=1.6 10.6*2=1.2 10.2*2=0.4 00.4*2=0.8 00.8*2=1.6 10.6*2=1.2 10.2*2=0.4 00.4*2=0.8 0.........因此0.1的二进制表示是无穷的0.0001100110011001100110011在Python 中是以双精度(64)位来保存浮点数,多余的部分会被截取掉,因此实际0.1在Python 中存储的是 0.00011001100110011001100110011001100110011001100110011001100因此在参与计算的时候,我们看到的是0.1。实际上 在计算中已经不是0.1了,而是一个很长的二进制数据,所以会存在误差。
消除误差的主要方法:
1、使用round() 函数指定小数点位数
2、使用decima 配合getcontext 来指定小数点精度
'''
print(0.1 + 0.2)# 使用round 提高精度
# 语法 round(val, num) 参数为传入的数据和指定的小数点位数
print(round(0.1 + 0.2, 3)) # 指定小数点保留的位数,当最右边存在0时,自动抹除,进位采用四舍五入
print(round(1.234, 2))
print(round(1.235, 2))# 使用decimal 和 getcontext 提高精度
from decimal import Decimal, getcontext
print('未指定精度')
print(Decimal(0.1) + Decimal(0.2)) # 发现使用decimal 计算时,小数后面计算的更加的精确
print(Decimal(1.234) + Decimal(1.2))print('指定精度')
getcontext().prec = 4 # 指定精度,包含非零整数部分
print(Decimal(0.1) + Decimal(0.2)) # 再次输出,小数精度会发生改变。值得注意的是,它不会抹除0
print(Decimal(1.234) + Decimal(1.2))
输出结果
0.30000000000000004
0.3
1.23
1.24
未指定精度
0.3000000000000000166533453694
2.433999999999999941380224300
指定精度
0.3000
2.434
Python3 浮点数精度问题相关推荐
- python3的float数精度_Python numpy 浮点数精度问题
Python numpy 浮点数精度问题 在复现FP(fictitious play, Iterative solution of games by fictitious play-page393)算 ...
- python3的float数精度_python浮点数精度问题
python浮点数的计算,结果并不像我们想象的那样,比如: >>> 0.25+0.25-0.4 0.09999999999999998 >>> 0.6+0.3-0. ...
- 计算价格, java中浮点数精度丢失的解决方案
计算价格, java中浮点数精度丢失的解决方案 转载于:https://www.cnblogs.com/gloryhope/p/9896719.html
- js浮点数精度丢失问题及如何解决js中浮点数计算不精准
js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...
- 浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
在知乎上上看到如下问题: 浮点数精度问题的前世今生? 1.该问题出现的原因 ? 2.为何其他编程语言,比如java中可能没有js那么明显 3.大家在项目中踩过浮点数精度的坑? 4.最后采用哪些方案规避 ...
- Python中浮点数精度处理
from: Python中浮点数精度处理 Python中,浮点数运算,经常会碰到如下情况: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确. 比如说: 0.1是十进制,转 ...
- java 浮点数精度_Java中浮点数精度问题
Java中浮点数精度问题 Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题.如下图所示: public class DataRang ...
- 用decimal模块增加python的浮点数精度
浮点数python默认是17位精度,也就是小数点后16位(16位以后的全部四舍五入了),虽然有16位,但是这个精度越往后越不准. 如果有特殊需求,需要更多的精度,可以用decimal模块,通过更改其里 ...
- Python中表示自然底数与浮点数精度(等效于MATLAB中eps)
python中怎么表示自然底数e和浮点数精度epsilon 自然底数e可以直接使用math.e表示. 浮点数精度epsilon可以使用np.spacing(1)来表征epsilon,等效于MATLAB ...
最新文章
- “清华数为”工业时序数据库IoTDB与DWF应用开发寒假师资培训圆满结束
- WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
- c# 中重载WndProc,实现重写“最小化”自定义功能的方法
- Python代码注释应该怎么写?
- logback高级特性使用-异步记录日志
- T T[] toArray(T[] a);
- Python实现石头-剪刀-布小游戏
- Android极光推送,Manifest merger failed with multiple errors, see logs
- 【Python学习】 - pyecharts包 - 地图可视化
- 分享我的数据恢复经历,IBM文件系统及存储故障数据恢复
- Spring : @Value注解
- Linux下的压缩和解压缩命令——compress/uncompress
- 简单的java恶搞小病毒_恶搞电脑病毒代码有哪些
- 开发竞赛作品展示网站上线!
- php 并列排名,MySQL并列排名和顺序排名查询
- 微博平台的RPC服务化实践
- 正态分布西格玛越大_6西格玛中正太分布包含什么?
- 颈椎病的成因及治疗预防方法
- 计算机毕业设计Java房产中介管理系统(源码+系统+mysql数据库+lW文档)
- System.Drawing.Printing.InvalidPrinterException: 未安装打印机。