加法里用0.3+0.6(任意带有小数点的都行)
然后发现会得到个Double的数据……竟发现是这样的:
0.3+0.6 = 0.89999999999999999
3.3+6.6 = 9.89999999999999999
0.1+0.2 = 0.30000000000000004
其他等待发现= =
然后发现会得到个Double的数据……竟发现是这样的:
0.3+0.6 = 0.89999999999999999
3.3+6.6 = 9.89999999999999999
0.1+0.2 = 0.30000000000000004
其他等待发现= =
2015-03-23
因为在计算机中进行小数运算是二进制的,而二进制的小数大部分转化成十进制时都成为了无限小数.
十进制中每一位是10^-N次方 而二进制是2^N次方.
比如,0.5=2^-1 0.25=2^-2 那么0.5~0.25之间就要用三位以上二进制小数来表示了.
能转换成有限位2进制小数的10进制小数,小数部分 F 必须满足:
F = (a1)*2^(-1) + (a2)*2^(-2) + (a3)*2^(-3) + …… + (an)*2^(-n),其中 an 表示 0 或者 1,n 不能是无穷大。。
所以Double的数据进行运算时,很多时候都会出现如上情况.
如果打印出规范的结果,可以使用 DecimalFormat 类 如:
DecimalFormat df= new DecimalFormat("#0.00");
double c=a+b;
String str_c=df.format(c);
这样就得到了两位小数了.
举报