Q : 浮点数计算问题,为什么会有偏差?
主要解答者: ChengKing 提交人: ChengKing
感谢: wuyi8808、fangxinggood、FlashElf、chenyuming2004
审核者: zeusvenus 社区对应贴子: 查看
A :
由于计算机里的数据是用二进制表示的,也就是说我们定义的int/float类型等存储到计算机里后都是转换为二进制形式表示的。等用到时,它会再自动把二进制数据转换为相应的:int/float等十进制类型,供我们使用. 二进制与十进制不是一一对应的, 例如"根2"值为1.414..... , 用二进值表示肯定会不准确,所以计算机是用近似值表示的.那么当取出来转换为十进制时(这个过程不存在误差,因为任何一个二进制数都梢宰既返淖晃剖?也就可能会有一些微小的转换误差(并不是所有的十进制数转换为二进制数都有误差的,无穷数比如:根3这样的数转换二进制数才会产生误差).
一般是这样用的,举个例子判断一个数是否为零的方法:
int zero=10*E-6; //自己定义精确度
public bool JudgeZero(int num)
{
if(Math.fabs(num-0) < zero)
{
return true;
}
return false;