在日常javaweb项目中,比较容易出现需要实现excel的部分公式。
下面是实现STDEVP(A1:AN)函数:
将A1到An的数封装成doubel的数组。
/**
* 只遍历数组一次求总体标准差
* @param sample doube数组
* @return
*/
private double TotalityStandardDeviation(double[] sample) {
if (1 > sample.length) {
return 0;
}
double dSum = 0.0; // 样本值之和
double dAverage = 0.0; // 样本值的平均值
// 遍历样本
for (int i = 0; i < sample.length; ++i) {
dSum += sample[i];
}
dAverage = dSum / sample.length;
// 遍历样本数字
dSum = 0.0;
for (int i = 0; i < sample.length; ++i) {
dSum += (sample[i] - dAverage) * (sample[i] - dAverage);
}
double dStdDev = Math.sqrt(dSum / sample.length);
return dStdDev;
}
-------------------------------------------------------------------------------------------------------------------
double在计算中会丢失精度,最好转成BigDecimal进行计算。