1 23 24 29 30 package com.sun.jdo.spi.persistence.support.sqlstore.query.util.type; 31 32 import java.math.BigDecimal ; 33 import java.math.BigInteger ; 34 35 42 public class MathType 43 extends ClassType 44 implements NumberType 45 { 46 49 public MathType(String name, Class clazz, int enumType, TypeTable typetab) 50 { 51 super(name, clazz, enumType, typetab); 52 } 53 54 57 public boolean isOrderable() 58 { 59 return true; 60 } 61 62 69 public Number getValue(Number value) 70 { 71 Number ret = null; 72 73 if (value == null) 74 ret = null; 75 else if ("java.math.BigDecimal".equals(getName())) 76 { 77 if (value instanceof BigDecimal ) 78 ret = value; 79 else if (value instanceof BigInteger ) 80 ret = new BigDecimal ((BigInteger )value); 81 else if (value instanceof Double ) 82 ret = new BigDecimal (((Double )value).toString()); 83 else if (value instanceof Float ) 84 ret = new BigDecimal (((Float )value).toString()); 85 else if (value instanceof Number ) 86 ret = BigDecimal.valueOf(((Number )value).longValue()); 87 } 88 else if ("java.math.BigInteger".equals(getName())) 89 { 90 if (value instanceof BigInteger ) 91 ret = value; 92 else if (value instanceof Double ) 93 ret = (new BigDecimal (((Double )value).toString())).toBigInteger(); 94 else if (value instanceof Float ) 95 ret = (new BigDecimal (((Float )value).toString())).toBigInteger(); 96 else if (value instanceof Number ) 97 ret = BigInteger.valueOf(((Number )value).longValue()); 98 } 99 100 return ret; 101 } 102 103 108 public Number negate(Number value) 109 { 110 Number ret = null; 111 112 if (value == null) 113 ret = null; 114 else if ("java.math.BigDecimal".equals(getName())) 115 { 116 if (value instanceof BigDecimal ) 117 ret = ((BigDecimal )value).negate(); 118 else if (value instanceof BigInteger ) 119 ret = new BigDecimal (((BigInteger )value).negate()); 120 else if (value instanceof Double ) 121 ret = (new BigDecimal (((Double )value).toString())).negate(); 122 else if (value instanceof Float ) 123 ret = (new BigDecimal (((Float )value).toString())).negate(); 124 else if (value instanceof Number ) 125 ret = BigDecimal.valueOf(-((Number )value).longValue()); 126 } 127 else if ("java.math.BigInteger".equals(getName())) 128 { 129 if (value instanceof BigInteger ) 130 ret = ((BigInteger )value).negate(); 131 else if (value instanceof Double ) 132 ret = (new BigDecimal (((Double )value).toString())).negate().toBigInteger(); 133 else if (value instanceof Float ) 134 ret = (new BigDecimal (((Float )value).toString())).negate().toBigInteger(); 135 else if (value instanceof Number ) 136 ret = BigInteger.valueOf(-((Number )value).longValue()); 137 } 138 139 return ret; 140 } 141 142 } 143 | Popular Tags |