java BigDecimal比较大小

时间:2025-03-20 13:59:21

使用的是compareTo方法

BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
int res = (b);
对比结果
大小情况 res值
a小于b -1
a等于b 0
a大于b 1

经常会有同学会想起来BigDecimal的对比方法而直接用 BigDecimal 转 double方式 然后进行比对。

BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
if(()>()){

}

那我们来看一下,这两种方式性能怎么样

然后写了如下代码

BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
long startTime = ();
for (int i = 0; i < 10000; i++) {
	int dd = (b);
}
long endTime = ();
("程序运行时间:" + (endTime - startTime) + "ms");
startTime = ();
for (int i = 0; i < 10000; i++) {
	boolean dd = ()>();
}
endTime = ();
("程序运行时间:" + (endTime - startTime) + "ms");
执行结果
方法 第一次 第二次 第三次 第四次 第五次 平均时间
BigDecimal比较 6ms 6ms 5ms 6ms 6ms 5.8ms
double比较 46ms 42ms 39ms 58ms 39ms 44.8ms

我们把执行的次数提升100倍

BigDecimal a=new BigDecimal(123.123);
BigDecimal b =new BigDecimal(300.12);
long startTime = ();
for (int i = 0; i < 1000000; i++) {
	int dd = (b);
}
long endTime = ();
("程序运行时间:" + (endTime - startTime) + "ms");
startTime = ();
for (int i = 0; i < 1000000; i++) {
	boolean dd = ()>();
}
endTime = ();
("程序运行时间:" + (endTime - startTime) + "ms");
执行结果
方法 第一次 第二次 第三次 第四次 第五次 平均时间
BigDecimal比较 70ms 76ms 61ms 78ms 101ms 77.2ms
double比较 954ms 969ms 898ms 909ms 924ms 930.8ms

 

总结:

使用BigDecimal比较方法和使用转换成double进行对比方法 性能有明显优势,执行次数越多越明显。