找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2633|回复: 2

[求助] 算式是 6.77*515 结果?

1

主题

1

帖子

1

积分

贫民

积分
1
belove 发表于 2019-3-9 17:18:30 | 显示全部楼层 |阅读模式
请教一个简单的乘法问题

算式是 6.77*515

为什么计算结果是3486.5499999999997 而不是3486.55

直接上图
exchange.JPG

回复

使用道具 举报

0

主题

7

帖子

7

积分

贫民

积分
7
pietyknight 发表于 2019-3-10 20:57:30 | 显示全部楼层
应该和数据的显示格式有关系吧?
你设置为“只显示2位小数”,可能结果就对了。
回复 支持 反对

使用道具 举报

4

主题

15

帖子

15

积分

贫民

积分
15
gzh888666 发表于 2020-4-24 16:10:05 | 显示全部楼层
本帖最后由 gzh888666 于 2020-4-24 16:19 编辑

详细的原理在IEEE 754浮点数标准
小数以二进制形式表示时的有穷性导致的,
这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾
计算机的内存、cpu寄存器等等这些硬件单元都是有限的,只能表示有限位数的二进制位,因此存储的二进制小数就会和实际转换而成的二进制数有一定的误差。(你可以试着将0.3转化为二进制表示,也将出现一个循环小数。)
实际上,大多数情况下,小数在计算机中是以一种类似科学计数法的形式表示的,具体的可以参考一下其他的资料。但即便如此,仍然存在误差。
所以在python中不建议直接将两个浮点数进行大小比较,或者做精确的计算,往往会得到意想不到的结果。
关于控制精度的方法可以使用round和decimal模块
使用decimal模块计算时:

from decimal import *
a = Decimal('6.77')*Decimal('515')
print(a)
b = 2.2 *3
print(b)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表