在下面的一个简单的程序:
public class BigDecimalTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(1.05+0.1);
System.out.println(1.02-0.42);
System.out.println(4.015*100);
System.out.println(1.3/100);
}
}
很明显答案是:1.15 0.6 401.5 0.013
但是运行的结果是:
1.1500000000000001
0.6000000000000001
401.49999999999994
0.013000000000000001
原则上java的float和double只能用来进行科学计算或者是工程计算,这明显不是开发者想要的结果。在大多数的商业计算中需要使用java.math.BigDecimal类,这样才能得到开发者想要的结果。
在上面的程序中,可以作以下的修改:
package com.pegatrom.test;
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//System.out.println(1.05+0.1);
//用BigDecimal类
BigDecimal v1=new BigDecimal(Double.toString(1.05));
BigDecimal v2=BigDecimal.valueOf(0.1);
System.out.println(v1.add(v2).doubleValue());
//System.out.println(1.02-0.42);
//用BigDecimal类
BigDecimal a1=new BigDecimal(Double.toString(1.02));
BigDecimal a2=BigDecimal.valueOf(0.42);
System.out.println(a1.subtract(a2).doubleValue());
//System.out.println(4.015*100);
//用BigDecimal类
BigDecimal b1=new BigDecimal(Double.toString(4.015));
BigDecimal b2=BigDecimal.valueOf(100);
System.out.println(b1.multiply(b2).doubleValue());
//System.out.println(1.3/100);
//用BigDecimal类
BigDecimal c1=new BigDecimal(Double.toString(1.3));
BigDecimal c2=BigDecimal.valueOf(100);
System.out.println(c1.divide(c2).doubleValue());
}
}
结果如下:
1.15
0.6
401.5
0.013
使用BigDecimal类时,主要分为以下几个步骤:
(1)用float或double变量构建BigDecimal对象;
(2)通过BigDecimal的加减乘除进行相应的算术运算;
(3)把BigDecimal对象转换成相应的float、double或int等类型