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 }