BigDecimal 怎么比较大小

时间:2024-01-03 18:10:41 买帖  | 投诉/举报

篇首语:本文由小编为大家整理,主要介绍了BigDecimal 怎么比较大小相关的知识,希望对你有一定的参考价值。

BigDecimal 怎么比较大小

BigDecimal比较大小使用compareTo(BigDecimal)方法:

int flag = bigdemical.compareTo(bigdemical1)。

flag = -1,表示bigdemical小于bigdemical1。

flag =0,表示bigdemical等于bigdemical1。

flag =1,表示bigdemical大于bigdemical1。

实际中直接跟0比较就可以了,别跟-1或者1比较。

构造方法

BigDecimal一共有4个构造方法:

BigDecimal(int) 创建一个具有参数所指定整数值的对象。

BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)

BigDecimal(long) 创建一个具有参数所指定长整数值的对象。

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

参考技术A

BigDecimal比大小,需要声明两个BigDecimal类型变量b1和b2,调用equals()方法比较大小。

BigDecimal a = new BigDecimal("1.00");

BigDecmial b = new BigDecimal(1);

想比较一下a和b的大小,一般都会用equals。

BigDecimal其他情况简介。

使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的。因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。

BigDecimal向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同。

参考技术B 可以通过BigDecimal的compareTo方法来进行比较。
返回的结果是int类型,-1表示小于,0是等于,1是大于。
参考技术C BigDecimal a = new BigDecimal("1.00");
BigDecmial b = new BigDecimal(1);
想比较一下a和b的大小,一般都会用equals
System.out.println(a.equals(b));
但是输出结果是:false
原因是:BigDecimal比较时,不仅比较值,而且还比较精度?
if(a.compareTo(b)==0) 结果是true
比较大小可以用 a.compareTo(b)
返回值 -1 小于 0 等于 1 大于
参考技术D 当然是使用compareTo:
new BigDecimal(1).compareTo(new BigDecimal("1.0"))
但是,注意:
compareTo 其实也有坑。如果试用:new BigDecimal(1) 与new BigDecimal("1.00"),结果是true. 但是换成 new BigDecimal(1.2).compareTo(new BigDecimal("1.20")),结果就是false.
这时问题又来了。所以保险的办法是把小数位去掉再比较。比如*100。都升到个位数。或者统一使用setScale定好小数位。
我之前就不知这个坑,搞了好久。

以上是关于BigDecimal 怎么比较大小的主要内容,如果未能解决你的问题,请参考以下文章