BigDecimal num1 = new BigDecimal("0"); BigDecimal num2 = new BigDecimal("0.00"); if (num1.compareTo(BigDecimal.ZERO) == 0) { System.out.println("num1 is equal to 0"); } if (num2.compareTo(BigDecimal.ZERO) == 0) { System.out.println("num2 is equal to 0 or 0.00"); } 优化这段代码
时间: 2023-12-14 17:37:04 浏览: 171
可以使用BigDecimal的equals方法来比较两个BigDecimal对象是否相等,而不必使用compareTo方法:
```
BigDecimal num1 = new BigDecimal("0");
BigDecimal num2 = new BigDecimal("0.00");
if (num1.equals(BigDecimal.ZERO)) {
System.out.println("num1 is equal to 0");
}
if (num2.equals(BigDecimal.ZERO)) {
System.out.println("num2 is equal to 0 or 0.00");
}
```
此外,如果只需要判断一个BigDecimal对象是否为零,还可以使用BigDecimal的signum方法,该方法返回一个int值,表示该BigDecimal对象的符号,如果返回值为0,则表示该对象为零:
```
BigDecimal num1 = new BigDecimal("0");
BigDecimal num2 = new BigDecimal("0.00");
if (num1.signum() == 0) {
System.out.println("num1 is equal to 0");
}
if (num2.signum() == 0) {
System.out.println("num2 is equal to 0 or 0.00");
}
```
相关问题
优化一下这段代码: List<BigDecimal> batteryList=new ArrayList<>(); batteryList.add(new BigDecimal("5.00")); //电池金额 batteryList.add(new BigDecimal("20.00")); BigDecimal init_couponBattery = new BigDecimal("3.00");//取绝对值 为 电池应扣金额 20 for (BigDecimal battery :batteryList){ if(init_couponBattery.compareTo(BigDecimal.ZERO) == 0){ System.out.println("应该优惠 0.00"); }else { BigDecimal a = battery.subtract(init_couponBattery);// 剩余 5 if(a.compareTo(BigDecimal.ZERO) > 0 || a.compareTo(BigDecimal.ZERO) == 0){ System.out.println("应该优惠"+ init_couponBattery);//15 init_couponBattery=new BigDecimal("0.00"); }else{ init_couponBattery = battery.subtract(init_couponBattery).abs(); //15 System.out.println("应该优惠"+ battery);//5 } } }
可以优化的点有:
1. 可以使用 Arrays.asList 方法创建列表并初始化,避免多行代码。
2. 可以将 BigDecimal.ZERO 提取出来作为一个常量,提高代码可读性。
3. 可以将 compareTo(BigDecimal.ZERO) == 0 简化为 equals(BigDecimal.ZERO)。
4. 可以将 if(a.compareTo(BigDecimal.ZERO) > 0 || a.compareTo(BigDecimal.ZERO) == 0) 简化为 if(a.signum() >= 0)。
优化后的代码如下:
```java
List<BigDecimal> batteryList = Arrays.asList(new BigDecimal("5.00"), new BigDecimal("20.00"));
BigDecimal init_couponBattery = new BigDecimal("3.00");
final BigDecimal ZERO = BigDecimal.ZERO;
for (BigDecimal battery : batteryList) {
if (init_couponBattery.equals(ZERO)) {
System.out.println("应该优惠 0.00");
} else {
BigDecimal a = battery.subtract(init_couponBattery);
if (a.signum() >= 0) {
System.out.println("应该优惠" + init_couponBattery);
init_couponBattery = ZERO;
} else {
init_couponBattery = battery.subtract(init_couponBattery).abs();
System.out.println("应该优惠" + battery);
}
}
}
```
public static void main(String[] args) { //初始化测试场景 BigDecimal[][] rrr = { {new BigDecimal("0.1"), new BigDecimal("10")}, {new BigDecimal("1"), new BigDecimal("10")}, {new BigDecimal("100"), new BigDecimal("10")}, {new BigDecimal("1000"), new BigDecimal("10")} }; BigDecimal min = new BigDecimal("0.01"); //测试个场景 for (BigDecimal[] decimals : rrr) { final BigDecimal amount = decimals[0]; final BigDecimal num = decimals[1]; System.out.println(amount + "元" + num + "个人抢======================================================="); test3(amount, min, num); } } private static void test3(BigDecimal amount,BigDecimal min ,BigDecimal num){ final Random random = new Random(); final int[] rand = new int[num.intValue()]; BigDecimal sum1 = BigDecimal.ZERO; BigDecimal redpeck ; int sum = 0; //num总人数 for (int i = 0; i < num.intValue(); i++) { rand[i] = random.nextInt(100); sum += rand[i]; } final BigDecimal bigDecimal = new BigDecimal(sum); BigDecimal remain = amount.subtract(min.multiply(num)); for (int i = 0; i < rand.length; i++) { if(i == num.intValue() -1){ redpeck = remain; }else{ redpeck = remain.multiply(new BigDecimal(rand[i])).divide(bigDecimal,2, RoundingMode.FLOOR); } if(remain.compareTo(redpeck) > 0){ remain = remain.subtract(redpeck); }else{ remain = BigDecimal.ZERO; } sum1= sum1.add(min.add(redpeck)); System.out.println("第"+(i+1)+"个人抢到红包金额为:"+min.add(redpeck)); } System.out.println("校验每个红包累计额度是否等于红包总额结果:"+(amount.compareTo(sum1)==0)); } }解释这段代码
这段代码是一个模拟红包抢购的功能。在 `main` 方法中,通过初始化了一个二维数组 `rrr`,其中每个元素包含两个 `BigDecimal` 类型的值,分别表示红包总金额和红包个数。然后使用 `test3` 方法对每个测试场景进行测试。
`test3` 方法中,首先使用随机数生成了一个长度为 `num.intValue()` 的整型数组 `rand`,并计算了数组中所有元素之和。接下来,根据红包总金额和红包个数计算出每个红包的剩余金额 `remain`。
然后,使用一个循环遍历整型数组 `rand`,计算每个人抢到的红包金额。如果是最后一个人抢红包,则将剩余金额全部分给他;否则,根据随机数和剩余金额的比例计算每个人抢到的金额,并更新剩余金额。最后,将每个人抢到的金额累加到 `sum1` 中,并输出每个人抢到的红包金额。
最后,校验所有红包的累计金额是否等于总金额,并输出结果。
阅读全文