1 package net.sf.saxon.sort; 2 import net.sf.saxon.om.Item; 3 import net.sf.saxon.trans.XPathException; 4 import net.sf.saxon.value.NumericValue; 5 import net.sf.saxon.value.Value; 6 7 import java.util.Comparator ; 8 9 16 17 public class NumericComparer implements Comparator , java.io.Serializable { 18 19 public NumericComparer() { 20 } 21 22 31 32 public int compare(Object a, Object b) { 33 34 35 double d1, d2; 36 37 if (a instanceof NumericValue) { 38 d1 = ((NumericValue)a).getDoubleValue(); 39 } else { 40 try { 41 String s1 = (a instanceof String ? (String )a : ((Item)a).getStringValue()); 42 d1 = Value.stringToNumber(s1); 43 } catch (NumberFormatException err) { 46 d1 = Double.NaN; 47 } 48 } 49 50 if (b instanceof NumericValue) { 51 d2 = ((NumericValue)b).getDoubleValue(); 52 } else { 53 try { 54 String s2 = (b instanceof String ? (String )b : ((Item)b).getStringValue()); 55 d2 = Value.stringToNumber(s2); 56 } catch (NumberFormatException err) { 59 d2 = Double.NaN; 60 } 61 } 62 63 if (Double.isNaN(d1)) { 64 if (Double.isNaN(d2)) { 65 return 0; 66 } else { 67 return -1; 68 } 69 } 70 if (Double.isNaN(d2)) { 71 return +1; 72 } 73 if (d1 < d2) return -1; 74 if (d1 > d2) return +1; 75 return 0; 76 77 } 78 79 } 80 81 | Popular Tags |