001 package data; 002 003 /** 004 * A NumberValue that is based on a {@link java.lang.Double} object. 005 * 006 * <p>All operations are implemented as one might expect.</p> 007 * 008 * @author Steffen Zschaler 009 * @version 2.0 19/08/1999 010 * @since v2.0 011 */ 012 public class DoubleValue extends NumberValue { 013 014 /** 015 * ID for serialization. 016 */ 017 private static final long serialVersionUID = 6693687843967962908L; 018 019 /** 020 * Create a new DoubleValue. 021 * 022 * @param nbValue the initial value of the object. Will be converted to a {@link java.lang.Double}. 023 */ 024 public DoubleValue(Number nbValue) { 025 super(nbValue); 026 } 027 028 /** 029 * Create a new DoubleValue. 030 * 031 * @param dlValue the initial value of the object. 032 */ 033 public DoubleValue(double dlValue) { 034 this(new Double(dlValue)); 035 } 036 037 /** 038 * Convert the given value to a {@link java.lang.Double} before setting the actual value of the object. 039 * 040 * @override Never 041 */ 042 public void setValue(Number nbValue) { 043 super.setValue(new Double(nbValue.doubleValue())); 044 } 045 046 /** 047 * @override Never 048 */ 049 public void addAccumulating(Value v) { 050 Number nbV = ((NumberValue)v).getValue(); 051 052 super.setValue(new Double(getValue().doubleValue() + nbV.doubleValue())); 053 } 054 055 /** 056 * @override Never 057 */ 058 public void subtractAccumulating(Value v) { 059 Number nbV = ((NumberValue)v).getValue(); 060 061 super.setValue(new Double(getValue().doubleValue() - nbV.doubleValue())); 062 } 063 064 /** 065 * @override Never 066 */ 067 public void multiplyAccumulating(Value v) { 068 Number nbV = ((NumberValue)v).getValue(); 069 070 super.setValue(new Double(getValue().doubleValue() * nbV.doubleValue())); 071 } 072 073 /** 074 * @override Never 075 */ 076 public void multiplyAccumulating(double dl) { 077 super.setValue(new Double(getValue().doubleValue() * dl)); 078 } 079 080 /** 081 * @override Never 082 */ 083 public void multiplyAccumulating(float fl) { 084 super.setValue(new Double(getValue().doubleValue() * fl)); 085 } 086 087 /** 088 * @override Never 089 */ 090 public void multiplyAccumulating(long l) { 091 super.setValue(new Double(getValue().doubleValue() * l)); 092 } 093 094 /** 095 * @override Never 096 */ 097 public void multiplyAccumulating(int n) { 098 super.setValue(new Double(getValue().doubleValue() * n)); 099 } 100 101 /** 102 * @override Never 103 */ 104 public void divideAccumulating(Value v) { 105 Number nbV = ((NumberValue)v).getValue(); 106 107 super.setValue(new Double(getValue().doubleValue() / nbV.doubleValue())); 108 } 109 110 /** 111 * @override Never 112 */ 113 public Value add(Value v) { 114 Number nbV = ((NumberValue)v).getValue(); 115 116 return new DoubleValue(new Double(getValue().doubleValue() + nbV.doubleValue())); 117 } 118 119 /** 120 * @override Never 121 */ 122 public Value subtract(Value v) { 123 Number nbV = ((NumberValue)v).getValue(); 124 125 return new DoubleValue(new Double(getValue().doubleValue() - nbV.doubleValue())); 126 } 127 128 /** 129 * @override Never 130 */ 131 public Value multiply(Value v) { 132 Number nbV = ((NumberValue)v).getValue(); 133 134 return new DoubleValue(new Double(getValue().doubleValue() * nbV.doubleValue())); 135 } 136 137 /** 138 * @override Never 139 */ 140 public Value multiply(double dl) { 141 return new DoubleValue(new Double(getValue().doubleValue() * dl)); 142 } 143 144 /** 145 * @override Never 146 */ 147 public Value multiply(float fl) { 148 return new DoubleValue(new Double(getValue().doubleValue() * fl)); 149 } 150 151 /** 152 * @override Never 153 */ 154 public Value multiply(long l) { 155 return new DoubleValue(new Double(getValue().doubleValue() * l)); 156 } 157 158 /** 159 * @override Never 160 */ 161 public Value multiply(int n) { 162 return new DoubleValue(new Double(getValue().doubleValue() * n)); 163 } 164 165 /** 166 * @override Never 167 */ 168 public Value divide(Value v) { 169 Number nbV = ((NumberValue)v).getValue(); 170 171 return new DoubleValue(new Double(getValue().doubleValue() / nbV.doubleValue())); 172 } 173 174 /** 175 * Compare this value to the given one. 176 * 177 * @override Never 178 * 179 * @exception ClassCastException if the given object cannot be casted into a {@link NumberValue}. 180 */ 181 public int compareTo(Value v) { 182 Number nbO = ((NumberValue)v).getValue(); 183 184 double dlDiff = (getValue().doubleValue() - nbO.doubleValue()); 185 186 if (dlDiff > 0) { 187 return 1; 188 } else { 189 if (dlDiff < 0) { 190 return -1; 191 } else { 192 return 0; 193 } 194 } 195 } 196 197 /** 198 * @override Never 199 */ 200 public Object clone() { 201 return new DoubleValue(new Double(getValue().doubleValue())); 202 } 203 204 /** 205 * Correctly checks <code>getValue().doubleValue()</code>. 206 * 207 * @override Never 208 */ 209 public boolean isAddZero() { 210 return (getValue().doubleValue() == 0); 211 } 212 213 /** 214 * Correctly checks <code>getValue().doubleValue()</code>. 215 * 216 * @override Never 217 */ 218 public boolean isMulOne() { 219 return (getValue().doubleValue() == 1); 220 } 221 }