原来浮点数是不适合精确计算的,原因是计算机里面数的计算都是二进制计算的,我们其实输入的十进制数,有些十进制数转换成二进制是可以精确转换,而有些转换则不是精确转换,得到的是一个最靠近它的数,所以这里面就存在一个误差。另外,如果浮点数不进行计算时,在十进制里面浮点数能正确显示,如果浮点数参与了计算,那么浮点数二进制与十进制间的转换过程就会变得不可而知,变得不可逆。
那么要想使得到的结果精确,可以使用Java DecimalFormat 类,用于格式化十进制数字。
DecimalFormat form = new DecimalFormat("#.00");
也可以使用Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。
BigDecimal b = new BigDecimal(Double.toString(a));