精度问题,你用 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.
不对,这应该是那个教程里的介绍;记不得了
不用纠结,以后记住浮点型参与计算的结果不要用与相等的判断就好了,如果要用round一下
C# 中不会
小数和整数不一样,在一个有限的范围内,存在着无数的小数,用有限的内存无法表示无限的小数,所有,计算机用只能取个非常接近这个数的一个近似的可表示的小数。这样会导致计算有些误差。
您可以选择用整数来计算,或者用decimal 类型来计算(不知道python有没有实现),decimal 和浮点数相比,缺点是很占内存。你一定很好奇decimal 为什么计算是精确的,我也不知道,如果有兴趣,可以看看源代码,总体思路就是空间换精度。
python 有 decimal
@韆: 那不错
浮点型计算的问题,不能直接用等于,一般是判断 a-b<0.001 ,就认为a==b
因为浮点数进制转换存在误差,小数点后的某些数一直乘2也乘不完
一楼正解,有个东西叫不确定尾数。讲的就是这个
浮点数运算出现不确定尾数是正常的,那我们知道这是正常的,怎么规避?
那就要用到round,如round(2.3-0.3)的结果为2
浮点数精度误差