ava中计算有时候会有误差,比如举个简单的例子:
public class Test{
public static void main(String[] args) {
System.out.println(1.9+0.3);}}
控制台输出的结果是2.1999999999999997,而把式子换成1.9+0.2可以在控制台输出正确结果2.1,1.9+0.4也可以在控制台输出正确的结果2.3。我又测试了很多,发现有时候有的式子就是不能精确计算,也没有找到什么规律。因为计算机计算的时候先是转换成二进制,再返回人类可以识别的数字,float类型的计算常出现这种问题。那么怎么让float活着double类型精确计算呢?
这时候就需要借助BigDecimal类,还是刚才的问题,更换一下代码:
public class Test{
public static void main(String[] args) {
double a=1.9;
double b=0.3;
//创建BigDecimal对象,把a当做参数传入
BigDecimal bj1=new BigDecimal(Double.toString(a));
BigDecimal bj2=new BigDecimal(Double.toString(b));
//以add方法做加的运算
double result=bj1.add(bj2).doubleValue();
System.out.println(result);
}}
这样就可以正确输出结果2.2了。
在扩展一下,这里加是add()方法,乘是multiply()方法,减是subtract()方法,除以是divide()方法,只不过不能整除的时候会抛出异常:java.lang.ArithmeticException。