谁能解释一下这个python的溢出问题?
巴扎黑
巴扎黑 2017-04-17 12:05:15
[Python讨论组]

在微博上看到七牛官方微博发的一个图片,自己试了试果真如此。看图说话(见下图),谁能解释下呀,或者给个思路从哪里入手分析这个问题。
(我知道是溢出,但是想知道具体是怎么溢出的。)

巴扎黑
巴扎黑

全部回复(3)
怪我咯

float 双精度浮点数不能精确的表示有些十进制的小数。

In [1]: 0.2 + 0.1 == 0.3
Out[1]: False

In [2]: 0.2 + 0.1
Out[2]: 0.30000000000000004

如果要精确计算,可以试用Decimal

In [1]: from decimal import Decimal

In [2]: Decimal('0.2') + Decimal('0.1')
Out[2]: Decimal('0.3')
迷茫

我目前正在学PYTHON,MIT的6.00有一课是专门讲这个的,解释的非常清楚。在PYTHON里,或者任保一种现代的编程语言里,float的表示方式(在64位的系统中),1位符号位,11位指数,52位底数。有些数是可以用二进制准确表示的,比如1/4,1/8(0.001),1/16。有些数是无法用二进制准确表示的1/10,PYTHON只能尽可能近似的表示,但这里面有一个位数的限制,只能表示17位的10进制数。而PYTHON会通过一个内建的REPR命令把内部表达式转化为str,然后display。

还有一点,print这个命令会默认自动的rounds

天蓬老师

简单解析:这是浮点数的表示方式。浮点数由符号位+底数+指数组成,这决定了每一个浮点数都是近似表示的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号