BigDecimal的使用 将任意类型转化为BigDecimal

float和double类型的主要设计目标是为了科学计算和工程计算。

但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。

一、在比较数值大小时候 将类型转化为bigdecimal

       a、将double类型转化为bigdecimal

Double a=1.23;或者 double a = 1.23
BigDecimal c = BigDecimal.valueOf(a);

其实是先将a转换为string类型 调用a.toString 然后调用 构造方法 也就是 BigDecimal c = new BigDecimal(a.toString)  

不能使用

BigDecimal decimal= new BigDecimal(1.23);

  这样输出的结果不可预料

b、将String转化为BigDecimal

String a= "1.23";
BigDecimal b = new BigDecimal(a)

c、将long转化为BigDecimal

long a= 333l;
BigDecimal b = BigDecimal.valueOf(a);

d、将int类型转化为BigDecimal

int a = 123;
BigDecimal b = BigDecimal.valueOf(a);

总结:将任意类型转化为BigDecimal

先转化为String 然后调用构造方法 new BigDecimal(String val)

//可以将String double long Integer转化为BigDecimal  其他类型可以扩展 
public static BigDecimal geBigDecimal1(Object value){
        if (value == null){
            return null;
        }

        if (value instanceof String || value instanceof Long || value instanceof Integer || value instanceof Double){
            return new BigDecimal(ObjectUtils.toString(value));
        }
        return null;
    }

转化成BigDecimal后可以进行加减乘除的计算

public BigDecimal add(BigDecimal value);                        //加法

public BigDecimal subtract(BigDecimal value);                   //减法 

public BigDecimal multiply(BigDecimal value);                   //乘法

public BigDecimal divide(BigDecimal value);                     //除法
public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("4.5");
        BigDecimal b = new BigDecimal("1.5");

        System.out.println("a + b =" + a.add(b));
        System.out.println("a - b =" + a.subtract(b));
        System.out.println("a * b =" + a.multiply(b));
        System.out.println("a / b =" + a.divide(b));
    }

 

转化成BigDecimal后可以指定小数个数 以及四舍五入等舍入方式


/*由数字字符串构造BigDecimal的方法 
*设置BigDecimal的小数位数的方法 
*/ 
import java.math.BigDecimal; 
//数字字符串 
String StrBd="1048576.1024"; 
//构造以字符串内容为值的BigDecimal类型的变量bd 
BigDecimal bd=new BigDecimal(StrBd); 
//设置小数位数,第一个变量是小数位数,第二个变量是取舍方法(四舍五入) 
bd=bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
//转化为字符串输出 

转化为BigDecimal后 数据进行比较大小  使用a.compareto(b)方法

BigDecimal a = new BigDecimal("23")
BigDecimal a = new BigDecimal("23.33")
//返回值 1 表示 a>b     -1表示a

比较时候不忽略精度时候使用 equals

//输出false
System.out.println(new BigDecimal("1.2").equals(new BigDecimal("1.20")));  

//输出true
System.out.println(new BigDecimal("1.2").compareTo(new BigDecimal("1.20")) == 0); 

结论:对于BigDecimal的大小比较,用equals方法的话会不仅会比较值的大小,还会比较两个对象的精确度,而compareTo方法则不会比较精确度,只比较数值的大小。

你可能感兴趣的:(java)