Files
HRMS/hrmsEjb/net/sf/jasperreports/engine/fill/JRBigDecimalVarianceIncrementer.java
2025-07-28 13:56:49 +05:30

55 lines
2.6 KiB
Java

package net.sf.jasperreports.engine.fill;
import java.math.BigDecimal;
class JRBigDecimalVarianceIncrementer extends JRAbstractExtendedIncrementer {
private static JRBigDecimalVarianceIncrementer mainInstance = new JRBigDecimalVarianceIncrementer();
public static JRBigDecimalVarianceIncrementer getInstance() {
return mainInstance;
}
public Object increment(JRCalculable variable, Object expressionValue, AbstractValueProvider valueProvider) {
BigDecimal value = (BigDecimal)variable.getIncrementedValue();
BigDecimal newValue = (BigDecimal)expressionValue;
if (newValue == null) {
if (variable.isInitialized())
return null;
return value;
}
if (value == null || variable.isInitialized())
return JRBigDecimalIncrementerFactory.ZERO;
BigDecimal countValue = (BigDecimal)valueProvider.getValue(variable.getHelperVariable((byte)0));
BigDecimal sumValue = (BigDecimal)valueProvider.getValue(variable.getHelperVariable((byte)1));
return countValue.subtract(JRBigDecimalIncrementerFactory.ONE).multiply(value).divide(countValue, 4).add(sumValue.divide(countValue, 4).subtract(newValue).multiply(sumValue.divide(countValue, 4).subtract(newValue)).divide(countValue.subtract(JRBigDecimalIncrementerFactory.ONE), 4));
}
public Object combine(JRCalculable calculable, JRCalculable calculableValue, AbstractValueProvider valueProvider) {
BigDecimal value = (BigDecimal)calculable.getIncrementedValue();
if (calculableValue.getValue() == null) {
if (calculable.isInitialized())
return null;
return value;
}
if (value == null || calculable.isInitialized())
return calculableValue.getIncrementedValue();
BigDecimal v1 = value;
BigDecimal c1 = (BigDecimal)valueProvider.getValue(calculable.getHelperVariable((byte)0));
BigDecimal s1 = (BigDecimal)valueProvider.getValue(calculable.getHelperVariable((byte)1));
BigDecimal v2 = (BigDecimal)calculableValue.getIncrementedValue();
BigDecimal c2 = (BigDecimal)valueProvider.getValue(calculableValue.getHelperVariable((byte)0));
BigDecimal s2 = (BigDecimal)valueProvider.getValue(calculableValue.getHelperVariable((byte)1));
c1 = c1.subtract(c2);
s1 = s1.subtract(s2);
BigDecimal c = c1.add(c2);
BigDecimal x1 = s1.divide(c, 4);
BigDecimal x2 = s2.divide(c, 4);
BigDecimal x3 = x1.multiply(x2);
return c1.divide(c, 4).multiply(v1).add(c2.divide(c, 4).multiply(v2)).add(c2.divide(c1, 4).multiply(x1).multiply(x1)).add(c1.divide(c2, 4).multiply(x2).multiply(x2)).subtract(x3).subtract(x3);
}
public Object initialValue() {
return JRBigDecimalIncrementerFactory.ZERO;
}
}