first commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user