首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两种不同创建BigDecimal的比较

两种不同创建BigDecimal的比较
EN

Stack Overflow用户
提问于 2019-11-25 12:31:08
回答 2查看 204关注 0票数 0

我想将包含字段的对象与BigDecimal进行比较

第一方法:

代码语言:javascript
复制
double sumItemsDouble = Arrays.asList(TestConstants.PRICES).stream()
                .mapToDouble(s -> Double.parseDouble(s)).sum();
BigDecimal sumItems = new BigDecimal(String.valueOf(sumItemsDouble));

第二种方法:

代码语言:javascript
复制
BigDecimal sumItems = items.stream().map(Item::getPrice)
        .reduce(BigDecimal.ZERO, BigDecimal::add);

创建比尔:

代码语言:javascript
复制
Bill bill = new Bill();
bill.setTotalAmount(sumItems);

此方法的结果:

  • 800.0
  • 800

我想比较这两个对象,但是它们是不同的,因为这个字段中的值不匹配。

代码语言:javascript
复制
Assert.assertThat(bill, is(expectedBill));
EN

回答 2

Stack Overflow用户

发布于 2019-11-25 14:17:56

下面是如何实现equals并使用注释中提到的适当比较:

代码语言:javascript
复制
class MyClass {
    BigDecimal value;
    // ... other fields

    public boolean equals(Object o) {
        if (o == this) return true;
        boolean result = (o instance of MyClass); 
        if (result) {
             MyClass other = (MyClass) o);
             result = areOtherFieldsEqual(other);
             result = result && (value.compareTo(other.value) == 0);
        }
        return result;
    }
    // also implement hashCode()
}

作为一个副词,

代码语言:javascript
复制
double sumItemsDouble = Arrays.asList(TestConstants.PRICES).stream()
                .mapToDouble(s -> Double.parseDouble(s)).sum();
BigDecimal sumItems = new BigDecimal(String.valueOf(sumItemsDouble));

这是一种非常奇怪的转换方式,将double转换为String,然后解析为BigDecimal。只要做BigDecimal sumItems = new BigDecimal(sumItemsDouble)。更好的是

代码语言:javascript
复制
Arrays.asList(PRICES).stream()
                     .map(BigDecimal::new)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
票数 1
EN

Stack Overflow用户

发布于 2019-11-25 12:50:32

在进行比较之前,可以使用setScale方法。

代码语言:javascript
复制
   BigDecimal b1 = BigDecimal.valueOf(800.0).setScale(2, RoundingMode.HALF_UP);
   BigDecimal b2 = BigDecimal.valueOf(800).setScale(2, RoundingMode.HALF_UP);

   b1.equals(b2);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59031909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档