我是靠谱客的博主 可耐小蝴蝶,最近开发中收集的这篇文章主要介绍BigDecimal的常用方法及源码解析一、BigDecimal的简要概括二、BigDecimal的加、减、乘、除。二、compareTo()的使用。总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、BigDecimal的简要概括

在我们的日常计算中,有时会涉及到比较大的数字之间的计算(如:超大金额的计算,银行汇款金额,利率、利息之间的换算等,都需要很精确的计算),这时,使用float、double这样的浮点数就不那么准确了。BigDecimal一般用来计算比较精度较高的数值,在很多大厂很受开发人员的青睐。下面我们简单的了解BigDecimal一些常用的方法。

二、BigDecimal的加、减、乘、除。

1.代码:

代码如下(示例):

import numpy as np

BigDecimal decimal = new BigDecimal("4.00");
        System.out.println("相加:"+decimal.add(new BigDecimal("3.00")));
        System.out.println("相减:"+decimal.subtract(new BigDecimal("1.00")));
        System.out.println("相除:"+decimal.divide(new BigDecimal("2.00")));
        System.out.println("相乘:"+decimal.multiply(new BigDecimal("7.00")));

2.运行结果:

相加:7.00
相减:3.00
相除:2
相乘:28.0000


二、compareTo()的使用。

1.代码:

BigDecimal d1 = new BigDecimal("4.00");
BigDecimal d2 = new BigDecimal("2.00");
BigDecimal d3 = new BigDecimal("4.00");
System.out.println("compareTo的比较:"+d1.compareTo(d2));
System.out.println("compareTo的比较:"+d2.compareTo(d1));
System.out.println("compareTo的比较:"+d1.compareTo(d3));

2.运行结果:

compareTo的比较:1
compareTo的比较:-1
compareTo的比较:0

3.compareTo方法源码解析:

public int compareTo(BigDecimal val) {
    // Quick path for equal scale and non-inflated case.
    if (scale == val.scale) {
        long xs = intCompact;
        long ys = val.intCompact;
        if (xs != INFLATED && ys != INFLATED)
            return xs != ys ? ((xs > ys) ? 1 : -1) : 0;
    }
    int xsign = this.signum();
    int ysign = val.signum();
    if (xsign != ysign)
        return (xsign > ysign) ? 1 : -1;
    if (xsign == 0)
        return 0;
    int cmp = compareMagnitude(val);
    return (xsign > 0) ? cmp : -cmp;
}

我们来简单的了解一下源码。
首先判断两个比较值的scale(标度)值是否相等,相等时进入if方法体,定义两个比较值的膨胀值(非负数),之后进入if判断语句,判断改膨胀值不等于最小long型取值范围,如果都满足条件则进入if的方法体,里面是两个嵌套的三目运算方程式。xs != ys ? ((xs > ys) ? 1 : -1) : 0;
1.如果xs不等于ys时为true,执行((xs > ys) ? 1 : -1)
接着,判断xs是否大于ys如果是则返回结果为1,否则为-1
2.如果xs等于ys时为false,返回结果为0。
两个比较值的scale(标度)值是不相等时,往下执行代码,首先定义两个精度值,方法方法里面

public int signum() {
    return (intCompact != INFLATED)?
        Long.signum(intCompact):
        intVal.signum();
}

首先是个三目运算判断膨胀值不等于最小long取值范围。若为true时则,执行
Long.signum(intCompact)方程式

public static int signum(long i) {
    // HD, Section 2-7
    return (int) ((i >> 63) | (-i >>> 63));
}

若为true时,则返回当前膨胀值。
接着继续对两值进行判断大小。
接下来的这个compareMagnitude(val)方法也是对两个比较值做其他规则的精度处理后判断大小,感兴趣的朋友可以去看源码。

总结

BigDecimal加、减、乘、除不能用通常的+、-、*、/。只能改方法封装的add()、subtract()、 divide() 、 multiply()的发方法执行运算。
compareTo() 的方法 x>y,返回 1,x=y,返回 0 ,x<y 返回 -1。
以上就是我今天的学习内容,有不对的请大佬们指点。

最后

以上就是可耐小蝴蝶为你收集整理的BigDecimal的常用方法及源码解析一、BigDecimal的简要概括二、BigDecimal的加、减、乘、除。二、compareTo()的使用。总结的全部内容,希望文章能够帮你解决BigDecimal的常用方法及源码解析一、BigDecimal的简要概括二、BigDecimal的加、减、乘、除。二、compareTo()的使用。总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部