首页 新闻 会员 周边 捐助

python3 为什么2.3-0.3不等于2而是1.99999999998

0
[待解决问题]

moju90的主页 moju90 | 菜鸟二级 | 园豆:202
提问于:2021-11-30 23:36
< >
分享
所有回答(9)
1

精度问题,你用 decimal 从新计算

官方的一段文字,以前记的,忘了出处
Is math broken in Python? What’s the deal with the answer of 3220.0000000000005?

This is an artifact of the floating point hardware on your computer only being able to accurately represent decimals in Base-2, not Base-10. For even simple calculations involving base-10 decimals, small errors are introduced. This is normal, although perhaps a bit surprising if you haven’t seen it before.
〆灬丶 | 园豆:2314 (老鸟四级) | 2021-12-01 09:04

不对,这应该是那个教程里的介绍;记不得了

支持(0) 反对(0) 〆灬丶 | 园豆:2314 (老鸟四级) | 2021-12-01 09:08
0

不用纠结,以后记住浮点型参与计算的结果不要用与相等的判断就好了,如果要用round一下

小小咸鱼YwY | 园豆:3312 (老鸟四级) | 2021-12-01 09:23
0

C# 中不会

中华鲟3670 | 园豆:922 (小虾三级) | 2021-12-01 10:37
2

小数和整数不一样,在一个有限的范围内,存在着无数的小数,用有限的内存无法表示无限的小数,所有,计算机用只能取个非常接近这个数的一个近似的可表示的小数。这样会导致计算有些误差。

您可以选择用整数来计算,或者用decimal 类型来计算(不知道python有没有实现),decimal 和浮点数相比,缺点是很占内存。你一定很好奇decimal 为什么计算是精确的,我也不知道,如果有兴趣,可以看看源代码,总体思路就是空间换精度。

会长 | 园豆:12463 (专家六级) | 2021-12-01 10:40

python 有 decimal

支持(0) 反对(0) 〆灬丶 | 园豆:2314 (老鸟四级) | 2021-12-01 15:03

@韆: 那不错

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2021-12-02 13:40
1

浮点型计算的问题,不能直接用等于,一般是判断 a-b<0.001 ,就认为a==b

WmW | 园豆:424 (菜鸟二级) | 2021-12-01 12:07
0

因为浮点数进制转换存在误差,小数点后的某些数一直乘2也乘不完

echo_lovely | 园豆:1584 (小虾三级) | 2021-12-01 15:09
0

一楼正解,有个东西叫不确定尾数。讲的就是这个

橘子Jane | 园豆:418 (菜鸟二级) | 2021-12-01 16:13
0

浮点数运算出现不确定尾数是正常的,那我们知道这是正常的,怎么规避?

那就要用到round,如round(2.3-0.3)的结果为2

熊泽-学习中的苦与乐 | 园豆:2272 (老鸟四级) | 2021-12-01 17:24
0

浮点数精度误差

计算机知识杂谈 | 园豆:470 (菜鸟二级) | 2021-12-01 19:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册