View Javadoc
1   package org.djunits.value.vfloat.scalar;
2   
3   import org.djunits.unit.DimensionlessUnit;
4   import org.djunits.unit.MoneyPerDurationUnit;
5   import org.djunits.unit.MoneyUnit;
6   
7   /**
8    * Easy access methods for the MoneyPerDuration FloatScalar, which is relative by definition. An example is Speed. Instead of:
9    * 
10   * <pre>
11   * FloatScalar.Rel&lt;MoneyPerDurationUnit&gt; value = new FloatScalar.Rel&lt;MoneyPerDurationUnit&gt;(100.0, MoneyPerDurationUnit.SI);
12   * </pre>
13   * 
14   * we can now write:
15   * 
16   * <pre>
17   * FloatMoneyPerDuration value = new FloatMoneyPerDuration(100.0, MoneyPerDurationUnit.SI);
18   * </pre>
19   * 
20   * The compiler will automatically recognize which units belong to which quantity, and whether the quantity type and the unit
21   * used are compatible.
22   * <p>
23   * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
24   * BSD-style license. See <a href="http://djunits.org/docs/license.html">DJUNITS License</a>.
25   * <p>
26   * $LastChangedDate: 2019-02-27 23:44:43 +0100 (Wed, 27 Feb 2019) $, @version $Revision: 333 $, by $Author: averbraeck $,
27   * initial version Sep 5, 2015 <br>
28   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
29   * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
30   */
31  public class FloatMoneyPerDuration extends AbstractFloatScalarRel<MoneyPerDurationUnit, FloatMoneyPerDuration>
32  {
33      /** */
34      private static final long serialVersionUID = 20150901L;
35  
36      /**
37       * Construct FloatMoneyPerDuration scalar.
38       * @param value float value
39       * @param unit unit for the float value
40       */
41      public FloatMoneyPerDuration(final float value, final MoneyPerDurationUnit unit)
42      {
43          super(value, unit);
44      }
45  
46      /**
47       * Construct FloatMoneyPerDuration scalar.
48       * @param value Scalar from which to construct this instance
49       */
50      public FloatMoneyPerDuration(final FloatMoneyPerDuration value)
51      {
52          super(value);
53      }
54  
55      /**
56       * Construct FloatMoneyPerDuration scalar using a double value.
57       * @param value double value
58       * @param unit unit for the resulting float value
59       */
60      public FloatMoneyPerDuration(final double value, final MoneyPerDurationUnit unit)
61      {
62          super((float) value, unit);
63      }
64  
65      /** {@inheritDoc} */
66      @Override
67      public final FloatMoneyPerDuration instantiateRel(final float value, final MoneyPerDurationUnit unit)
68      {
69          return new FloatMoneyPerDuration(value, unit);
70      }
71  
72      /**
73       * Interpolate between two values.
74       * @param zero the low value
75       * @param one the high value
76       * @param ratio the ratio between 0 and 1, inclusive
77       * @return a Scalar at the ratio between
78       */
79      public static FloatMoneyPerDuration interpolate(final FloatMoneyPerDuration zero, final FloatMoneyPerDuration one,
80              final float ratio)
81      {
82          return new FloatMoneyPerDuration(zero.getInUnit() * (1 - ratio) + one.getInUnit(zero.getUnit()) * ratio,
83                  zero.getUnit());
84      }
85  
86      /**
87       * Return the maximum value of two monetary scalars.
88       * @param r1 the first scalar
89       * @param r2 the second scalar
90       * @return the maximum value of two monetary scalars
91       */
92      public static FloatMoneyPerDuration max(final FloatMoneyPerDuration r1, final FloatMoneyPerDuration r2)
93      {
94          return (r1.gt(r2)) ? r1 : r2;
95      }
96  
97      /**
98       * Return the maximum value of more than two monetary scalars.
99       * @param r1 the first scalar
100      * @param r2 the second scalar
101      * @param rn the other scalars
102      * @return the maximum value of more than two monetary scalars
103      */
104     public static FloatMoneyPerDuration max(final FloatMoneyPerDuration r1, final FloatMoneyPerDuration r2,
105             final FloatMoneyPerDuration... rn)
106     {
107         FloatMoneyPerDuration maxr = (r1.gt(r2)) ? r1 : r2;
108         for (FloatMoneyPerDuration r : rn)
109         {
110             if (r.gt(maxr))
111             {
112                 maxr = r;
113             }
114         }
115         return maxr;
116     }
117 
118     /**
119      * Return the minimum value of two monetary scalars.
120      * @param r1 the first scalar
121      * @param r2 the second scalar
122      * @return the minimum value of two monetary scalars
123      */
124     public static FloatMoneyPerDuration min(final FloatMoneyPerDuration r1, final FloatMoneyPerDuration r2)
125     {
126         return (r1.lt(r2)) ? r1 : r2;
127     }
128 
129     /**
130      * Return the minimum value of more than two monetary scalars.
131      * @param r1 the first scalar
132      * @param r2 the second scalar
133      * @param rn the other scalars
134      * @return the minimum value of more than two monetary scalars
135      */
136     public static FloatMoneyPerDuration min(final FloatMoneyPerDuration r1, final FloatMoneyPerDuration r2,
137             final FloatMoneyPerDuration... rn)
138     {
139         FloatMoneyPerDuration minr = (r1.lt(r2)) ? r1 : r2;
140         for (FloatMoneyPerDuration r : rn)
141         {
142             if (r.lt(minr))
143             {
144                 minr = r;
145             }
146         }
147         return minr;
148     }
149 
150     /**
151      * Calculate the division of FloatMoneyPerDuration and FloatMoneyPerDuration, which results in a FloatDimensionless scalar.
152      * @param v FloatMoneyPerDuration scalar
153      * @return FloatDimensionless scalar as a division of FloatMoneyPerDuration and FloatMoneyPerDuration
154      */
155     public final FloatDimensionless divideBy(final FloatMoneyPerDuration v)
156     {
157         return new FloatDimensionless(this.si / v.si, DimensionlessUnit.SI);
158     }
159 
160     /**
161      * Calculate the multiplication of FloatMoneyPerDuration and FloatDuration, which results in a FloatMoney scalar.
162      * @param v FloatMoneyPerDuration scalar
163      * @return FloatMoney scalar as a multiplication of FloatMoneyPerDuration and FloatDuration
164      */
165     public final FloatMoney multiplyBy(final FloatDuration v)
166     {
167         return new FloatMoney(this.si * v.si, MoneyUnit.getStandardMoneyUnit());
168     }
169 
170     /**
171      * Calculate the division of FloatMoneyPerDuration and FloatFrequency, which results in a FloatMoney scalar.
172      * @param v FloatMoneyPerDuration scalar
173      * @return FloatMoney scalar as a division of FloatMoneyPerDuration and FloatFrequency
174      */
175     public final FloatMoney divideBy(final FloatFrequency v)
176     {
177         return new FloatMoney(this.si / v.si, MoneyUnit.getStandardMoneyUnit());
178     }
179 
180 }