概述
一、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()的使用。总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复