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