java浮点计算(doube,float),有时会出现会出现一些与我们预想不一样的结果,比如
System.out.println(0.05 + 0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);
实际的输出确实这样的:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
这明细不符合我们想要的结果,这是由于计算机底层的计算原理造成的,有些浮点数在计算机中无法用二进制表示,
比如0.1在计算机中只是表示成了一个近似值
如果在某些要求比较高的系统中,如金融系统,是不允许出现这样的情况的
解决办法:
涉及到浮点精确计算时,采用BigDecimal类,这个类的计算结果是正确的,并且当计算位数比较大时,必须用用BigDecimal
将浮点数转换成BigDecimal时建议采用字符串做为参数的构造方法,BigDecimal dou=new BigDecimal("0.1");
add()//加法
subtract()//减法
multiply()// 乘法
divide()//除法
compareTo()//比较 ,放回值为int类型,0相等 ,1大于,-1小于
如果非要两个浮点数运算,可以将相关的运算写成公共方法,在公共方法中将两个数转成BigDecial运算。