Revision 9000

View differences:

trunk/applications/appgvSIG/src/com/iver/cit/gvsig/TableNumericFieldOperations.java
6 6

  
7 7
import com.hardcode.driverManager.DriverLoadException;
8 8
import com.hardcode.gdbms.engine.data.driver.DriverException;
9
import com.hardcode.gdbms.engine.values.NullValue;
9 10
import com.hardcode.gdbms.engine.values.NumericValue;
10 11
import com.iver.andami.PluginServices;
11 12
import com.iver.andami.messages.NotificationManager;
......
51 52

  
52 53
	protected void doExecute(Table table){
53 54
		int fieldIndex = table.getSelectedFieldIndices().nextSetBit(0);
54

  
55
		int numRows=0;
55 56
		SelectableDataSource ds=null;
56 57
		try {
57
			ds = (SelectableDataSource)table.getModel().getModelo().getRecordset();
58
			ds = table.getModel().getModelo().getRecordset();
58 59
		} catch (DriverLoadException e1) {
59 60
			// TODO Auto-generated catch block
60 61
			e1.printStackTrace();
......
72 73
			BigDecimal min = new BigDecimal(Double.MAX_VALUE);
73 74
			BigDecimal max = new BigDecimal(Double.MIN_VALUE);
74 75
			for(int i=selectedRows.nextSetBit(0); i>=0; i=selectedRows.nextSetBit(i+1)) {
76
				if (ds.getFieldValue(i, fieldIndex) instanceof NullValue)
77
					continue;
78
				numRows++;
75 79
				double d = ((NumericValue) ds.getFieldValue(i, fieldIndex)).doubleValue();
76 80
				suma = suma.add(new BigDecimal(d));
77 81
				if (d < min.doubleValue()) min = new BigDecimal(d);
78 82
				if (d > max.doubleValue()) max = new BigDecimal(d);
79 83
			}
80
			BigDecimal media = suma.divide(new BigDecimal(rc), BigDecimal.ROUND_HALF_DOWN);
84
			Statistics st = new Statistics();
85
			BigDecimal media = new BigDecimal(0);
81 86
			BigDecimal varianza = new BigDecimal(0);
82
			for(int i=selectedRows.nextSetBit(0); i>=0; i=selectedRows.nextSetBit(i+1)) {
83
				double d = ((NumericValue) ds.getFieldValue(i, fieldIndex)).doubleValue();
84
				BigDecimal dif = new BigDecimal(d).subtract(media);
85
				varianza = dif.multiply(dif).add(varianza);
87
			double desviacion = 0;
88
			if (numRows==0) {
89
				suma = new BigDecimal(0);
90
				min = new BigDecimal(0);
91
				max = new BigDecimal(0);
92
			}else {
93
				media = suma.divide(new BigDecimal(numRows), BigDecimal.ROUND_HALF_DOWN);
94
				varianza = new BigDecimal(0);
95
				for(int i=selectedRows.nextSetBit(0); i>=0; i=selectedRows.nextSetBit(i+1)) {
96
					if (ds.getFieldValue(i, fieldIndex) instanceof NullValue)
97
						continue;
98
					double d = ((NumericValue) ds.getFieldValue(i, fieldIndex)).doubleValue();
99
					BigDecimal dif = new BigDecimal(d).subtract(media);
100
					varianza = dif.multiply(dif).add(varianza);
101
				}
102
				varianza = varianza.divide(new BigDecimal(numRows), BigDecimal.ROUND_HALF_DOWN);
103
				desviacion = Math.sqrt(varianza.doubleValue());
86 104
			}
87
			varianza = varianza.divide(new BigDecimal(rc), BigDecimal.ROUND_HALF_DOWN);
88
			double desviacion = Math.sqrt(varianza.doubleValue());
89 105

  
90
			Statistics st = new Statistics();
91
			st.setStatistics(media.doubleValue(), max.doubleValue(), min.doubleValue(), varianza.doubleValue(), desviacion, rc, new BigDecimal(max.doubleValue()).subtract(min).doubleValue(), suma.doubleValue());
106
			st.setStatistics(media.doubleValue(), max.doubleValue(), min.doubleValue(), varianza.doubleValue(), desviacion, numRows, new BigDecimal(max.doubleValue()).subtract(min).doubleValue(), suma.doubleValue());
92 107
			PluginServices.getMDIManager().addWindow(st);
93 108

  
94 109
		} catch (DriverException e) {

Also available in: Unified diff