零基础java自学流程-Java语言进阶72

想要系统学习JAVA推荐JAVA300集
Java300集零基础适合初学者视频教程←点击


 Java中BigDecimal类的介绍和用法  

Java提供了具有大数(大于16位)的操作类,即Java .math. bininteger类和Java .math. bigdecimal类,用于高精度计算。  

BigInteger类是一个处理大整数的类,而BigDecimal类是一个处理大数字和小数字的类。  

BigDecimal类的实现使用了BigInteger类,只不过BigDecimal添加了小数的概念。  

浮点数和双精度数只能用于科学或工程计算; 在需要数字精度的商业计算中,必须使用BigInteger和BigDecimal类,它们支持任意精度的定点数,可以用来精确计算货币值。  

BigDecimal类创建的对象不能直接使用传统的+、-、*、/算术运算符进行数学计算,但必须调用它们相应的方法。 方法参数也必须是BigDecimal类型的对象。  

一、构造BigDecimal 对象常用方法

  1、方法一

BigDecimal BigDecimal(double d); //不允许使用

  2、方法二

BigDecimal BigDecimal(String s); //常用,推荐使用

  3、方法三

static BigDecimal valueOf(double d); //常用,推荐使用

注意:  

1.  双构造函数不允许使用!!!! 因为它没有得到准确的值,它会变大;  

2.  String构造函数是完全可以预测的:写入new BigDecimal("0.1")将创建一个BigDecimal,它完全等于预期的0.1; 因此,通常建议优先使用String构造函数;  

3. 静态方法valueOf(double val)内部实现,仍然double to String; 这通常是将double(或float)转换为BigDecimal的首选方法;  

 测试代码如下:

package com.qiyuan.util;

import java.math.BigDecimal;

public class orderCode {

    public static void main(String[] args) {
        double d1 = 0.10334;
        double d2 = 1234.0;
        
        System.out.println("new BigDecimal("+d1+")=" + new BigDecimal(d1)); //此种方式绝对不允许!!!!!
        System.out.println("new BigDecimal("+d2+")=" + new BigDecimal(d2)); //此种方式绝对不允许!!!!!
        System.out.println("");
        
        System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(String.valueOf(d1)));
        System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(String.valueOf(d2)));
        System.out.println("");
        
        System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + new BigDecimal(Double.toString(d1)));
        System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + new BigDecimal(Double.toString(d2)));
        System.out.println("");
        
        System.out.println("BigDecimal.valueOf("+d1+")=" + BigDecimal.valueOf(d1));
        System.out.println("BigDecimal.valueOf("+d2+")=" + BigDecimal.valueOf(d2));
        System.out.println("");

        BigDecimal b1 = BigDecimal.valueOf(1);
        BigDecimal b2 = BigDecimal.valueOf(1.00000);
        System.out.println(b1.equals(b2));
        System.out.println(b1.compareTo(b2));
    }

}

  输出如下:

new BigDecimal(0.10334)=0.10334000000000000130118138486068346537649631500244140625
new BigDecimal(1234.0)=1234

new BigDecimal(String.valueOf(0.10334))=0.10334
new BigDecimal(String.valueOf(1234.0))=1234.0

new BigDecimal(String.valueOf(0.10334))=0.10334
new BigDecimal(String.valueOf(1234.0))=1234.0

BigDecimal.valueOf(0.10334)=0.10334
BigDecimal.valueOf(1234.0)=1234.0

false
0

想要系统学习JAVA推荐JAVA300集
Java300集零基础适合初学者视频教程←点击

上一篇:精度计算总结 -- BigDecimal,NumberFormat 其他


下一篇:BigDecimal取整数