java steam bigdecimal求平均数_java(002)
时间: 2023-10-22 14:25:46 浏览: 89
可以使用Java 8中的Stream和BigDecimal来计算平均数,以下是示例代码:
```java
import java.math.BigDecimal;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
BigDecimal[] nums = {new BigDecimal("1.23"), new BigDecimal("2.34"), new BigDecimal("3.45")};
BigDecimal sum = Arrays.stream(nums).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal avg = sum.divide(BigDecimal.valueOf(nums.length), 2, BigDecimal.ROUND_HALF_UP);
System.out.println("平均数为:" + avg);
}
}
```
代码解释:
1. 定义一个包含BigDecimal类型元素的数组 `nums`。
2. 使用 `Arrays.stream(nums)` 将数组转换为流。
3. 使用 `reduce` 方法将流中所有元素求和,初始值为 `BigDecimal.ZERO`。
4. 将求和结果除以元素个数,保留2位小数并四舍五入,得到平均数。
5. 输出平均数。
相关问题
BigDecimal中的ROUND_HALF_EVEN已过时
在Java中,BigDecimal的ROUND_HALF_EVEN已被标记为过时方法,因为它可能会导致一些不合理的行为。ROUND_HALF_EVEN是一个四舍五入模式,它的规则是:如果要舍弃的数字恰好等于0.5,则舍入结果应该是最接近的偶数。这种舍入方式可以减少舍入误差,但也可能导致一些问题。例如,如果使用ROUND_HALF_EVEN对一个无限循环小数进行舍入,可能会导致错误的结果。
为了解决这些问题,Java 9 引入了一些新的舍入模式,包括ROUND_HALF_UP、ROUND_HALF_DOWN、ROUND_CEILING、ROUND_FLOOR等。这些新的舍入模式提供了更加灵活和精确的舍入方式,可以根据具体的需求进行选择。
bigdecimal.ROUND_DOWN与 BigDecimal.ROUND_HALF_UP
`BigDecimal.ROUND_DOWN` 和 `BigDecimal.ROUND_HALF_UP` 是 Java 中 `BigDecimal` 类中的常量,用于控制 `BigDecimal` 对象的舍入行为。
`BigDecimal.ROUND_DOWN` 表示直接截断小数部分,不做四舍五入,例如:
```
new BigDecimal("3.1415926").setScale(2, BigDecimal.ROUND_DOWN) // 输出 3.14
```
`BigDecimal.ROUND_HALF_UP` 表示四舍五入,例如:
```
new BigDecimal("3.1415926").setScale(2, BigDecimal.ROUND_HALF_UP) // 输出 3.14
new BigDecimal("3.1455926").setScale(2, BigDecimal.ROUND_HALF_UP) // 输出 3.15
```
需要注意的是,`BigDecimal` 的舍入行为是有一定精度误差的,因此在做数值计算时需要谨慎处理。
阅读全文