20170702 Java常用类 BigDecimal类

参考文献:《Java疯狂讲义》(第三版)

BigDecimal类

问题:double类型会发生精度丢失(不止是Java),尤其是进行算术运算的时候。

为此,Java提供了BigDecimal类;

解决方法:提供大量构造器用于创建BigDecimal对象,包括所有基本数值型变量转换成一个BigDecimal对象,也包括利用数字字符串,数字字符串数组来创建BigDecimal对象

注:不推荐使用构造器,因为使用构造器时有一定不可预知性。

例:当程序使用new BigDecimal(0.1)来创建一个BigDecimal对象时,它的值不是0.1,它实际上是等于一个近似0.1的数。这是因为0.1无法准确地表示为double浮点数,所以传入BigDecimal的值不会正好等于0.1。

技巧:

如果使用BigDecimal(String val)构造器的结果是可预知的——写入new BigDecimal(“0.1”)将创建一个BigDecimal,它正好等于预期的0.1。因此通常建议优先使用基于String的构造器。

使用方式:

如果必须使用double浮点数作为BigDecimal构造器的参数时,不要直接将该double浮点数作为构造器参数创建BigDecimal对象,而是应该通过BigDecimal.valueOf(double value)静态方法来创建BigDecimal对象。

BigDecimal类提供了方法对精确浮点数进行常规算术运算。

注:创建BigDecimal对象时,不要直接使用浮点数double作为构造器参数来调用BigDecimal构造器,否则同样会发生精度丢失。

你可能感兴趣的:(20170702 Java常用类 BigDecimal类)