BigDecimal.ZERO 与bigdecimal 0.0 比较大小结果是啥
时间: 2024-03-12 07:46:12 浏览: 153
在Java中,`BigDecimal`是一种高精度的十进制浮点数表示方式,而`0.0`是普通的双精度浮点数。这两者之间是不可以直接进行比较的,因为它们的精度和表示方式不同。
如果您想比较`BigDecimal`类型的`0`和`double`类型的`0.0`,可以先将`0.0`转换成`BigDecimal`类型,然后再进行比较。例如:
```
BigDecimal zero1 = BigDecimal.ZERO;
BigDecimal zero2 = BigDecimal.valueOf(0.0);
if (zero1.compareTo(zero2) == 0) {
System.out.println("zero1 equals zero2");
} else {
System.out.println("zero1 does not equal zero2");
}
```
这段代码会输出"zero1 equals zero2",因为`BigDecimal.ZERO`和`BigDecimal.valueOf(0.0)`都表示精确的0,它们的值相等。
相关问题
if(newOrderDetail.getPrincipal0.equals(new BigDecimal(0.0))){} 这段代码有几个问题
这段代码中存在两个问题:
1. `getPrincipal0` 方法应该加上括号,变成 `getPrincipal0()`,表示调用方法而不是获取属性。
2. 使用 `equals` 方法比较 BigDecimal 类型的值可能会出现精度问题,应该使用 `compareTo` 方法进行比较。
因此,正确的写法应该是:
```
if(newOrderDetail.getPrincipal0().compareTo(BigDecimal.ZERO) == 0) {}
```
其中 `BigDecimal.ZERO` 表示值为 0 的 BigDecimal 对象。
解释下面代码的意思: String[] dayTime = new String[]{"00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00"}; for (String t : dayTime) { ReportVo reportVo = new ReportVo(); reportVo.setTime(t); if (snList.size() > 0) { BigDecimal value = BigDecimal.ZERO; Boolean isNull = true; for (Map map : object1) { if (!snList.contains(MapUtils.getString(map, "meterNo")) || !code.equals(MapUtils.getString(map, "code"))) { continue; } Date temp = (Date) MapUtils.getObject(map, "createTime"); if (StringUtils.equals(t, DateUtils.formatDate2Str(temp, "HH:mm"))) { value = NumberUtil.add(value, new BigDecimal(MapUtils.getString(map, "value", "0.0"))); isNull = false; } } if (isNull) { reportVo.setValue("--"); } else { reportVo.setValue(value.setScale(2, RoundingMode.HALF_UP).toString()); } } todayList.add(reportVo); }
这段代码定义了一个字符串数组 dayTime,其中包含一天24小时的时间点。然后使用 for 循环遍历这个数组,在循环中,创建了一个 ReportVo 对象,并设置其时间属性为当前遍历到的时间点。然后通过一些逻辑处理,计算出该时间点对应的数据值,并设置到 ReportVo 对象的 value 属性中。最后将 ReportVo 对象添加到一个名为 todayList 的列表中。具体的逻辑处理包括:判断指定的 snList 是否包含一个 Map 对象的 meterNo 属性,并且该 Map 对象的 code 属性是否等于指定的 code;如果是,则取出该 Map 对象的 createTime 属性并将其格式化为 HH:mm 格式,判断是否等于当前遍历到的时间点;如果是,则取出该 Map 对象的 value 属性,将其转换为 BigDecimal 对象并加到之前的 value 上,最后将结果设置到 ReportVo 对象的 value 属性中。如果没有符合条件的 Map 对象,则将 ReportVo 对象的 value 属性设置为 "--"。这段代码的作用是根据一些数据计算出一天24小时内每个时间点对应的数据值,并存储到一个列表中。
阅读全文