jdk 8 实现BigDecimal实现List求标准差和方差
时间: 2024-09-12 12:09:55 浏览: 72
在Java中,使用`BigDecimal`对`List`求标准差和方差需要几个步骤。首先,你需要计算平均值,然后计算每个值与平均值的差值的平方,最后计算这些平方差的平均值,即方差。标准差是方差的平方根。
下面是一个示例代码,展示了如何使用`BigDecimal`来实现这个过程:
```java
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.ArrayList;
import java.util.List;
public class BigDecimalStatistics {
public static void main(String[] args) {
// 示例数据
List<BigDecimal> values = new ArrayList<>();
values.add(new BigDecimal("10.0"));
values.add(new BigDecimal("20.0"));
values.add(new BigDecimal("30.0"));
values.add(new BigDecimal("40.0"));
values.add(new BigDecimal("50.0"));
// 计算平均值
BigDecimal average = calculateAverage(values);
// 计算方差和标准差
BigDecimal variance = calculateVariance(values, average);
BigDecimal standardDeviation = variance.sqrt(new MathContext(5));
System.out.println("平均值: " + average);
System.out.println("方差: " + variance);
System.out.println("标准差: " + standardDeviation);
}
public static BigDecimal calculateAverage(List<BigDecimal> values) {
BigDecimal sum = BigDecimal.ZERO;
for (BigDecimal value : values) {
sum = sum.add(value);
}
return sum.divide(new BigDecimal(values.size()), new MathContext(5));
}
public static BigDecimal calculateVariance(List<BigDecimal> values, BigDecimal average) {
BigDecimal sumOfSquares = BigDecimal.ZERO;
for (BigDecimal value : values) {
BigDecimal squaredDifference = value.subtract(average).pow(2);
sumOfSquares = sumOfSquares.add(squaredDifference);
}
BigDecimal variance = sumOfSquares.divide(new BigDecimal(values.size()), new MathContext(5));
return variance;
}
}
```
在这个代码中,我们首先定义了一个名为`BigDecimalStatistics`的类,其中包含了两个静态方法:`calculateAverage`和`calculateVariance`。
`calculateAverage`方法计算了`BigDecimal`列表的平均值。它遍历列表中的每个`BigDecimal`值,将其累加起来,然后除以值的数量来得到平均值。
`calculateVariance`方法计算方差,它需要两个参数:一个是值的列表,另一个是平均值。对于列表中的每个值,计算其与平均值之差的平方,然后将这些平方差相加得到总和。最后,将总和除以值的数量得到方差。
请注意,对于标准差,我们使用了`BigDecimal`的`sqrt`方法来计算方差的平方根,并传入了一个`MathContext`对象,它指定了计算的精度。
阅读全文