美文网首页
20170702 Java常用类 BigDecimal类

20170702 Java常用类 BigDecimal类

作者: houc | 来源:发表于2017-07-04 18:46 被阅读20次

    参考文献:《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类

          本文链接:https://www.haomeiwen.com/subject/bfvxhxtx.html