浮点数间运算存在不确定尾数,不是bug
例子:
会发现0.1+0.2不等于0.3,这即为不确定尾数,这不是运行或者编译错误,而是与计算机对数字运算的内部实现原理有关。
原理如下:
python语言中使用53位二进制来表示浮点类型的小数部分,0.1由0.00011001100110011001100110011001100110011001100110011010来表示,但它不等于0.1,转化为十进制小数时为0.1000000000000000 055…,空格以前是转化为十进制后显示的部分。所以0.1+0.2会无限接近0.3但会出现尾数。
二进制表示小数,可以无限接近,但不是相等的。
解决方法:
使用round函数。
round(x,d):对x四舍五入,d为小数的截取位数。
不确定尾数一般发生在10^-16左右,round()函数非常有效
例如: