'''
很多语言中都有浮点数数据精度的问题,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 浮点数精度问题相关推荐

  1. python3的float数精度_Python numpy 浮点数精度问题

    Python numpy 浮点数精度问题 在复现FP(fictitious play, Iterative solution of games by fictitious play-page393)算 ...

  2. python3的float数精度_python浮点数精度问题

    python浮点数的计算,结果并不像我们想象的那样,比如: >>> 0.25+0.25-0.4 0.09999999999999998 >>> 0.6+0.3-0. ...

  3. 计算价格, java中浮点数精度丢失的解决方案

    计算价格, java中浮点数精度丢失的解决方案 转载于:https://www.cnblogs.com/gloryhope/p/9896719.html

  4. js浮点数精度丢失问题及如何解决js中浮点数计算不精准

    js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...

  5. 浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源

    在知乎上上看到如下问题: 浮点数精度问题的前世今生? 1.该问题出现的原因 ? 2.为何其他编程语言,比如java中可能没有js那么明显 3.大家在项目中踩过浮点数精度的坑? 4.最后采用哪些方案规避 ...

  6. Python中浮点数精度处理

    from: Python中浮点数精度处理 Python中,浮点数运算,经常会碰到如下情况: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确. 比如说: 0.1是十进制,转 ...

  7. java 浮点数精度_Java中浮点数精度问题

    Java中浮点数精度问题 Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题.如下图所示: public class DataRang ...

  8. 用decimal模块增加python的浮点数精度

    浮点数python默认是17位精度,也就是小数点后16位(16位以后的全部四舍五入了),虽然有16位,但是这个精度越往后越不准. 如果有特殊需求,需要更多的精度,可以用decimal模块,通过更改其里 ...

  9. Python中表示自然底数与浮点数精度(等效于MATLAB中eps)

    python中怎么表示自然底数e和浮点数精度epsilon 自然底数e可以直接使用math.e表示. 浮点数精度epsilon可以使用np.spacing(1)来表征epsilon,等效于MATLAB ...

最新文章

  1. “清华数为”工业时序数据库IoTDB与DWF应用开发寒假师资培训圆满结束
  2. WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
  3. c# 中重载WndProc,实现重写“最小化”自定义功能的方法
  4. Python代码注释应该怎么写?
  5. logback高级特性使用-异步记录日志
  6. T T[] toArray(T[] a);
  7. Python实现石头-剪刀-布小游戏
  8. Android极光推送,Manifest merger failed with multiple errors, see logs
  9. 【Python学习】 - pyecharts包 - 地图可视化
  10. 分享我的数据恢复经历,IBM文件系统及存储故障数据恢复
  11. Spring : @Value注解
  12. Linux下的压缩和解压缩命令——compress/uncompress
  13. 简单的java恶搞小病毒_恶搞电脑病毒代码有哪些
  14. 开发竞赛作品展示网站上线!
  15. php 并列排名,MySQL并列排名和顺序排名查询
  16. 微博平台的RPC服务化实践
  17. 正态分布西格玛越大_6西格玛中正太分布包含什么?
  18. 颈椎病的成因及治疗预防方法
  19. 计算机毕业设计Java房产中介管理系统(源码+系统+mysql数据库+lW文档)
  20. System.Drawing.Printing.InvalidPrinterException: 未安装打印机。

热门文章

  1. vue-router基本概念总结
  2. 微信小程序页面间传值
  3. Java物联网项目中,运行SPringBoot脚手架,运行失败问题
  4. ByteBuffer的用法
  5. [蓝桥杯]圆周率(Python)
  6. 记一次无意间发现某学校图书检索系统的变量覆盖漏洞
  7. ChinaSoft 论坛巡礼 | 高可信嵌入式软件工程技术论坛
  8. 80-Python_输入华氏温度转换成摄氏温度
  9. C语言程序设计 密码开锁 指针的介绍
  10. 逻辑代数几个重要定理