把double换成BigDecimal
时间: 2023-08-15 21:14:26 浏览: 124
Java用BigDecimal解决double类型相减时可能存在的误差
5星 · 资源好评率100%
要将代码中的`double`类型更改为`BigDecimal`类型,需要进行以下更改:
1. 在导入部分添加`import java.math.BigDecimal;`,以便使用`BigDecimal`类。
2. 将涉及金额的地方从`double`更改为`BigDecimal`类型。这包括在`Map<String, Object>`中存储金额的地方和求和操作的地方。
下面是修改后的示例代码:
```java
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> a = Arrays.asList("elem1", "elem2", "elem3");
List<Map<String, Object>> c = Arrays.asList(
Map.of("item", "elem1", "amount", new BigDecimal("10.0")),
Map.of("item", "elem2", "amount", new BigDecimal("20.0")),
Map.of("item", "elem3", "amount", new BigDecimal("30.0")),
Map.of("item", "elem4", "amount", new BigDecimal("40.0"))
);
BigDecimal sum = c.stream()
.filter(map -> a.contains(map.get("item")))
.map(map -> (BigDecimal) map.get("amount"))
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("Total sum: " + sum);
}
}
```
在这个示例中,我们将金额从`double`类型更改为`BigDecimal`类型,并使用`new BigDecimal()`构造函数来创建`BigDecimal`对象。在求和操作时,使用`reduce()`方法将`BigDecimal.ZERO`作为初始值,并使用`BigDecimal::add`作为累加器函数。
请注意,使用`BigDecimal`进行精确计算可能会比使用`double`更加复杂和耗费资源。确保根据具体需求进行适当的处理,例如设置精度、舍入模式等。
阅读全文