BigDecimal a = new BigDecimal("10.00"); BigDecimal b = new BigDecimal("10");
//前提为a、b均不能为null if(a.compareTo(b) == -1){ System.out.println("a小于b"); } if(a.
compareTo(b) == 0){ System.out.println("a等于b"); } if(a.compareTo(b) == 1){
System.out.println("a大于b"); } if(a.compareTo(b) > -1){ System.out.println(
"a大于等于b"); } if(a.compareTo(b) < 1){ System.out.println("a小于等于b"); }
BigDecimal是Java里精确计算的类,下面说一下两个BigDecimal对象大小,相等的判断。
一般的对象用equals,但是BigDecimal比较特殊,举个例子:
Java代码 收藏代码
BigDecimal a=BigDecimal.valueOf(1.0);
BigDecimal b=BigDecimal.valueOf(1.000);

在现实中这两个数字是相等的,但是如果用a.equals(b)结果是false;怎么不相等了呢?因为equals是比较内容,“1.0”和“1.000”当然不一样了。
解决办法:if(a.compareTo(b)==0) 结果是true。
实例一:

Java代码 收藏代码
import java.math.BigDecimal; public class Test { public static void main(String
[] args) { BigDecimal a = new BigDecimal("10.00"); BigDecimal b = new BigDecimal
("10"); BigDecimal c = new BigDecimal(10.00); //equals方式 System.out.println(a.
equals(b)); //false System.out.println(a.equals(c)); //false
//toPlainString再equals System.out.println(a.toPlainString().equals(b.
toPlainString())); //false System.out.println(a.toPlainString().equals(c.
toPlainString())); //false //longValue方式 System.out.println(a.longValue() == b.
longValue()); //true System.out.println(a.longValue() == c.longValue()); //true
//compareTo System.out.println(a.compareTo(b) == 0); //true System.out.println(a
.compareTo(c) == 0); //true } } 从实例一来看,好像longValue方式也可以,让我们继续看实例二。
实例二:

Java代码 收藏代码
import java.math.BigDecimal; public class Test02 { public static void main(
String[] args) { BigDecimal d = new BigDecimal("10.100001"); BigDecimal e = new
BigDecimal(10.100001); System.out.println(e.equals(d)); //false System.out.
println(e.toPlainString().equals(d.toPlainString())); //false System.out.println
(e.longValue() == d.longValue()); //true System.out.println(e.compareTo(d) == 0)
; //false } }
为什么compareTo方法不可以了,而longValue方式却还是OK的。让我们Debug一下。
Debug我们发现,BigDecimal d = new BigDecimal("10.100001");和BigDecimal e = new
BigDecimal(10.100001); 出来的两个对象,实际上确实是不一样的,而longValue()后都变成了10。
BigDecimal如何保留小数位
1 BigDecimal big = new BigDecimal(“2.3513”); //设置BigDecimal初始值
2 big.setScale(1); // 保留1位小数,默认用四舍五入。
3 big.setScale(1, BigDecimal.ROUND_DOWN); // 直接删除多余的小数,2.3513直接被截断位2.3
4 big.setScale(1, BigDecimal.ROUND_HALE_UP); //四舍五入,向上舍入,2.3513变成2.4
5 big.setScale(1, BigDecimal.ROUND_HALF_DOWN); //四舍五入,向下舍入,2.3513变成2.3

方法总结为:

*
setScale(int x); BigDecimal值后保留x位小数

*
setScale(x, BigDecimal.ROUND_DOWN); 保留1位小数,默认用四舍五入

*
setScale(x, BigDecimal.ROUND_HALE_UP); 保留一位小数,向上舍入

*
setScale(x, BigDecimal.ROUND_HALF_DOWN); 保留一位小数,向下舍入

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信