为了账号安全,请及时绑定邮箱和手机立即绑定

Python运算显示结果问题

Python运算显示结果问题

偶然的你 2019-03-06 11:05:44
本人刚开始学Python,今天在练习时遇到个奇怪的问题,请大家帮忙看看是什么原因明明都加的是3.69,为什么一个结果正确,另一个却显示了那么长的小数位?
查看完整描述

4 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也会带来不可控制的后果。
因为,在计算机的世界中只认识0与1。而0.1 的二进制表示为 0.000110011[0011]...,因为是无限循环的,无法用有限的位表示,所以计算机系统会进行舍入,以求用最接近的值来表示,这里涉及到不同的舍入方式。
再比如,double类型是 64bit 的,最多能表达 2^64 个数,实数有多少呢?无数个,所以 double 类型是装不下所有实数的,只能表达一个近似值。

查看完整回答
反对 回复 2019-03-17
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

python计算要把数字先转为二进制,然后因为小数以二进制形式表示时的有穷性,导致计算误差。就像1/3 = 0.333333333... ; 1/3 + 1/3 + 1/3 =0.33333... + 0.33333.... +0.33333... = 0.9999999.... 。大概这个意思,你自己理解下吧

查看完整回答
反对 回复 2019-03-17
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我的也一样,不纠结这个。反正使用时指定精度就行了。

帮你试了,必须写成这样才行。二进制表示10进制的小数,10进制里很正常的

谈谈关于Python里面小数点精度控制的问题

十进制整数不会变成二进制小数,但十进制很短的小数的是可能变成二进制很长小数的。
例如0.54转变成二进制是:
0.54=0.10001010001111010111000010100011110101110000101001B

还有一些十进制下一两位小数,在二进制下无限循环小数的,只能取近似值。

 


查看完整回答
反对 回复 2019-03-17
  • 4 回答
  • 0 关注
  • 610 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信