1.Java的八种基本数据类型

image.png
在开发的时候,根据实际的需求来进行选择,主要是关注占用的字节数,节约内存空间。

但是你知道,Java所有的数据类型最后最后转换为二进制来进行运算,而浮点数据float double在运算的过程中都会丢失精度。

  1. public class FloatTest {
  2. public static void main(String[] args) {
  3. System.out.println(0.2 + 0.1);
  4. System.out.println(0.3 - 0.1);
  5. System.out.println(0.2 * 0.1);
  6. System.out.println(0.3 / 0.1);
  7. }
  8. }

输出结果:

  1. 0.30000000000000004
  2. 0.19999999999999998
  3. 0.020000000000000004
  4. 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
为什么不建议采用第一种构造方法呢?来看例子

  1. public class FloatTest {
  2. public static void main(String[] args)
  3. {
  4. BigDecimal bigDecimal = new BigDecimal(2);
  5. BigDecimal bDouble = new BigDecimal(2.3);
  6. BigDecimal bString = new BigDecimal("2.3");
  7. System.out.println("bigDecimal=" + bigDecimal);
  8. System.out.println("bDouble=" + bDouble);
  9. System.out.println("bString=" + bString);
  10. }
  11. }

输出结果:

  1. bigDecimal=2
  2. bDouble=2.29999999999999982236431605997495353221893310546875
  3. bString=2.3

当double必须用作BigDecimal的源时,请使用Double.toString(double)``转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf,如下

  1. BigDecimal bDouble2 = new BigDecimal(Double.toString(2.3));

3.BigDecimal加减乘除运算

对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。

  1. public BigDecimal add(BigDecimal value); //加法
  2. public BigDecimal subtract(BigDecimal value); //减法
  3. public BigDecimal multiply(BigDecimal value); //乘法
  4. public BigDecimal divide(BigDecimal value); //除法

4.总结

 (1)商业计算使用BigDecimal。
(2)尽量使用参数类型为String的构造函数。
(3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。