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 }