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

关于Python运算显示结果问题

关于Python运算显示结果问题

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

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-08-05
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-08-05
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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

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

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

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

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





查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 1120 浏览
慕课专栏
更多

添加回答

举报

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