详细聊聊为什么Python中0.2+0.1不等于0.3

作者:阳光下的小恐龙 时间:2021-08-19 12:12:35 

为什么Python中0.2+0.1不等于0.3

大家请看下面的python程序代码:

print(0.2+0.1)

猜一猜运行结果是什么,是0.3吗?

NoNoNo!

来看一看运行结果:

0.30000000000000004

为什么是0.30000000000000004呢?

浮点数运算

这是因为在计算机中,浮点数运算也是要先转化为二进制的

1.浮点数如何转化为二进制:

⑴整数部分:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序

⑵小数部分:乘以2,然后取出整数部分,将剩下的小数部分继续乘以2,然后再取整数部分,一直取到小数部分为零为止。

如果永远不为零,则按要求保留足够位数的小数,最后一位做0舍1入。将取出的整数顺序排列。

2. 0.2转化为二进制:(只看小数点后)

0.2 × 2 = 0.4 取 0
0.4 × 2 = 0.8 取 0
0.8 × 2 = 1.6 取 1
0.6 × 2 = 1.2 取 1
0.2 × 2 = 0.4 取 0
0.4 × 2 = 0.8 取 0
0.8 × 2 = 1.6 取 1
…

所以0.2转化为浮点数为0.001100110011…(0011无限循环)0.1转化为二进制:

同理0.1转化为浮点数为0.0001100110011…(0011无限循环)

0.2+0.1

因为在计算机中,0.2和0.1都不是确定的数,而是近似值,因此它们经过浮点数运算(对阶、尾数运算、规格化处理、舍入处理、溢出处理)后得到的值也是近似值,经过了计算机的四舍五入。所以结果是0.30000000000000004

附:实现0.1+0.2==0.3

在python中有一个模块decimal可以解决0.1+0.2!=0.3的问题。

decimal模块提供了一个Decimal数据类型用于浮点数的计算,相比于内置的二进制浮点数计算更加精确。

简单的使用方法:给decimal传递Decimal整型或者字符串类型,但不能是浮点数据(浮点数据本身不准确)

详细聊聊为什么Python中0.2+0.1不等于0.3

详细聊聊为什么Python中0.2+0.1不等于0.3

来源:https://blog.csdn.net/qq_52067365/article/details/123055674

标签:python,0.1+0.2,0.3
0
投稿

猜你喜欢

  • SQL Server如何保证可空字段中非空值唯一

    2024-01-17 07:19:03
  • 哪种Python框架适合你?简单介绍几种主流Python框架

    2023-04-27 03:21:52
  • Mysql索引创建删除及使用代价

    2024-01-16 15:32:35
  • Python标准库之Math,Random模块使用详解

    2021-02-09 22:33:13
  • Python模拟登录requests.Session应用详解

    2023-08-04 08:40:38
  • 利用Python复制文件的9种方法总结

    2022-06-25 15:00:27
  • 快速一键生成Python爬虫请求头

    2022-05-21 01:00:53
  • django项目环境搭建及在虚拟机本地创建django项目的教程

    2022-10-14 14:04:32
  • python统计cpu利用率的方法

    2022-02-05 23:33:44
  • 详解Python下Flask-ApScheduler快速指南

    2023-12-25 07:37:34
  • python如何用pyecharts制作词云图

    2021-05-16 09:35:46
  • python with提前退出遇到的坑与解决方案

    2023-12-24 15:02:35
  • python定时利用QQ邮件发送天气预报的实例

    2021-10-14 00:45:16
  • Numpy数组转置的实现

    2022-10-16 09:15:34
  • thinkPHP引入类的方法详解

    2024-06-05 09:45:55
  • MySQL数据库优化之分表分库操作实例详解

    2024-01-20 10:33:53
  • asp access数据库并生成XML文件范例

    2011-03-29 10:49:00
  • 用python实现的线程池实例代码

    2023-11-06 23:04:54
  • sql server update 表的问题

    2009-10-04 20:32:00
  • python使用PIL模块获取图片像素点的方法

    2022-07-28 10:57:57
  • asp之家 网络编程 m.aspxhome.com