1.Java的八种基本数据类型
在开发的时候,根据实际的需求来进行选择,主要是关注占用的字节数,节约内存空间。
但是你知道,Java所有的数据类型最后最后转换为二进制来进行运算,而浮点数据float double在运算的过程中都会丢失精度。
public class FloatTest {
public static void main(String[] args) {
System.out.println(0.2 + 0.1);
System.out.println(0.3 - 0.1);
System.out.println(0.2 * 0.1);
System.out.println(0.3 / 0.1);
}
}
输出结果:
0.30000000000000004
0.19999999999999998
0.020000000000000004
2.9999999999999996
但是如果碰到银行系统或者交易系统,我们就不能直接使用float 或者 double这样的类型,在大多数的商业计算中或者一般货币计算的时候都要用到BigDecimal类。
2.BigDecimal构造方法
1.public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用
2.public BigDecimal(int val) 将int表示形式转换成BigDecimal
3.public BigDecimal(String val) 将String表示形式转换成BigDecimal
为什么不建议采用第一种构造方法呢?来看例子
public class FloatTest {
public static void main(String[] args)
{
BigDecimal bigDecimal = new BigDecimal(2);
BigDecimal bDouble = new BigDecimal(2.3);
BigDecimal bString = new BigDecimal("2.3");
System.out.println("bigDecimal=" + bigDecimal);
System.out.println("bDouble=" + bDouble);
System.out.println("bString=" + bString);
}
}
输出结果:
bigDecimal=2
bDouble=2.29999999999999982236431605997495353221893310546875
bString=2.3
当double必须用作BigDecimal的源时,请使用Double.toString(double)``转成String,然后
使用String构造方法,或使用BigDecimal的静态方法valueOf,如下
BigDecimal bDouble2 = new BigDecimal(Double.toString(2.3));
3.BigDecimal加减乘除运算
对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。
public BigDecimal add(BigDecimal value); //加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法
4.总结
(1)商业计算使用BigDecimal。
(2)尽量使用参数类型为String的构造函数。
(3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。