工作中时常会用到浮点型数据,而对其进行运算和四舍五入之后经常会发现精度错乱的问题。
例如double a,b,c;c=a+b,然而加之前a,b都是做过四舍五入处理的,a=0.17,b=0.25 ,最后c竟然是:0.42000000000000004
原因
浮点型十进制运算会先将十进制小数转化为二进制,过程中如果出现了循环小数,且存储小数的二进制长度不够用,就会造成误差。
其他进制转化也会存在这种误差。
可以使用Decimal类型解决该问题,Decimal类型的有效位数达到28位,而double类型的16位,所以Decimal类型比Double类型能表示更精确的浮点数。
延伸
1.在double类型数值进行比较大小的情况最好使用1.02-1.01==double.MinValue这种方式进行判断
2.使用double类型进行加减的情况下看看能否使用Decimal类型进行计算