public final class Temperature extends java.lang.Object implements java.lang.Comparable<Temperature>, java.io.Serializable
To create a Temperature object you can use the static
factory methods celsius(double) and fahrenheit(double). For example:
Temperature celsiusTemp = Temperature.celsius(15.5);
Temperature fahrenheitTemp = Temperature.fahrenheit(65);
You can pass a temperature into a Calculation to define the base
temperature that that Calculation should use to calculate degree
days. Use a Celsius temperature for Celsius degree days, and a Fahrenheit
temperature for Fahrenheit degree days.
This class enables temperatures to be defined to the nearest 0.1 degrees (either 0.1 C or 0.1 F). Given the limitations of temperature-recording equipment and methods, it is meaningless to consider temperature differences smaller than this.
When creating a Temperature object, you can pass in any double
value within the maximum and minimum limits set by the temperature unit. But
the value you pass in will always be rounded to the nearest 0.1
degrees.
For example, a Celsius Temperature created with a value of 15.5
will be equal to one created with 15.456 or 15.543. And
a Fahrenheit Temperature created with 65 will be equal to one
created with 64.96 or 65.04.
One benefit of this is that you can easily define a range of base temperatures in a loop without worrying too much about the inaccuracies of floating-point arithmetic. The automatic rounding should correct any such issues (e.g. rounding 69.9998 up to 70).
Instances of this class are immutable. You can safely reuse them and call them from multiple threads at once.
| Constructor and Description |
|---|
Temperature(double value,
TemperatureUnit unit)
Constructs a
Temperature object with the specified units and
value (rounded to the nearest 0.1 degrees). |
| Modifier and Type | Method and Description |
|---|---|
static Temperature |
celsius(double value)
Returns a non-null
Temperature object with the specified
Celsius temperature rounded to the nearest 0.1°C. |
static java.util.SortedSet<Temperature> |
celsiusRange(double firstValue,
double lastValue,
double step)
Returns a non-null low-to-high
SortedSet of
Temperature objects, with Celsius values running from
firstValue to lastValue (inclusive), and the
specified step between each consecutive temperature. |
int |
compareTo(Temperature comparisonTemperature)
Compares two
Temperature objects for low-to-high ordering. |
boolean |
equals(java.lang.Object o)
Two
Temperature objects can only be equal if they have the
same units and temperature value (value comparisons being made
after any rounding). |
static Temperature |
fahrenheit(double value)
Returns a non-null
Temperature object with the specified
Fahrenheit temperature rounded to the nearest 0.1°F. |
static java.util.SortedSet<Temperature> |
fahrenheitRange(double firstValue,
double lastValue,
double step)
Returns a non-null low-to-high
SortedSet of
Temperature objects, with Fahrenheit values running from
firstValue to lastValue (inclusive), and the
specified step between each consecutive temperature. |
int |
hashCode()
Overridden to ensure consistency with
equals. |
boolean |
isCelsius()
|
boolean |
isFahrenheit()
|
java.lang.String |
toNumericString()
Returns a non-null, non-empty string representation of the numeric
base-temperature value, like "50" or "15.5" or "-5" or "33.1", in a
format suitable for insertion into the appropriate unit-specific
element(s) of the request XML.
|
java.lang.String |
toString()
Returns a non-null, non-empty string representation of the temperature
and its units.
|
TemperatureUnit |
unit()
Returns the non-null unit of this temperature.
|
double |
value()
Returns a
double representation of the 0.1-precision number
stored internally. |
public Temperature(double value,
TemperatureUnit unit)
Temperature object with the specified units and
value (rounded to the nearest 0.1 degrees).value - a temperature value, the limits of which will depend on the
unitunit - specifying whether the temperature is in Celsius or
Fahrenheit. Cannot be null.java.lang.IllegalArgumentException - if value is
NaN, or outside the limits allowed by
unit.java.lang.NullPointerException - if unit is null.celsius(double),
fahrenheit(double)public static Temperature celsius(double value)
Temperature object with the specified
Celsius temperature rounded to the nearest 0.1°C.value - a Celsius temperature that's greater than or equal to
-273°C (absolute zero) and less than or equal to 3000°C
(hotter than the hottest blast furnaces). Note that the
base-temperature range over which it would typically make sense to
calculate degree days is much smaller than the range
allowed by these limits.java.lang.IllegalArgumentException - if value is NaN, less than
-273°C, or greater than 3000°C.fahrenheit(double)public static Temperature fahrenheit(double value)
Temperature object with the specified
Fahrenheit temperature rounded to the nearest 0.1°F.value - a Fahrenheit temperature that's greater than or equal to
-459.4°F (absolute zero) and less than or equal to 5432°F
(hotter than the hottest blast furnaces). Note that the
base-temperature range over which it would typically make sense to
calculate degree days is much smaller than the range
allowed by these limits.java.lang.IllegalArgumentException - if value is
NaN, less than -459.4°F, or greater than
5432°F.celsius(double)public static java.util.SortedSet<Temperature> celsiusRange(double firstValue, double lastValue, double step)
SortedSet of
Temperature objects, with Celsius values running from
firstValue to lastValue (inclusive), and the
specified step between each consecutive temperature.
For example, to get Celsius temperatures between 10°C and 30°C (inclusive), with each temperature being 5°C greater than the last (giving temperatures 10°C, 15°C, 20°C, 25°C, and 30°C):
SortedSet<Temperature> temps = Temperature.celsiusRange(10, 30, 5);
firstValue - the Celsius value of the first Temperature to
be included in the returned SortedSet. This must be
greater than or equal to -273°C and less than or equal to
3000°C.lastValue - the Celsius value of the last Temperature to be
included in the returned SortedSet. This must be
greater than or equal to firstValue. Also, like for
firstValue, it must be greater than or equal to
-273°C and less than or equal to 3000°C.step - the Celsius temperature difference between each temperature
value to be included in the returned SortedSet.
Cannot be NaN, and must be greater than zero. It must
also be a multiple of 0.1 (the smallest temperature
difference allowed), though allowances are made for floating-point
imprecision (so for example a step of
0.4999999 will be treated as 0.5).java.lang.IllegalArgumentException - if any of the parameters are
NaN; if firstValue or
lastValue are outside of their allowed range
(-273°C to 3000°C inclusive); if lastValue
is less than firstValue; if step is not
positive; or if step is not a multiple of
0.1 (allowing for slight deviations caused by
floating-point imprecision).fahrenheitRange(double, double, double),
TemperatureUnit.range(double, double, double)public static java.util.SortedSet<Temperature> fahrenheitRange(double firstValue, double lastValue, double step)
SortedSet of
Temperature objects, with Fahrenheit values running from
firstValue to lastValue (inclusive), and the
specified step between each consecutive temperature.
For example, to get Fahrenheit temperatures between 50°F and 70°F (inclusive), with each temperature being 5°F greater than the last (giving temperatures 50°F, 55°F, 60°F, 65°F, and 70°F):
SortedSet<Temperature> temps = Temperature.fahrenheitRange(50, 70, 5);
firstValue - the Fahrenheit value of the first Temperature
to be included in the returned SortedSet. This must
be greater than or equal to -459.4°F and less than or equal to
5432°F.lastValue - the Fahrenheit value of the last Temperature to
be included in the returned SortedSet. This must be
greater than or equal to firstValue. Also, like for
firstValue, it must be greater than or equal to
-459.4°F and less than or equal to 5432°F.step - the Fahrenheit temperature difference between each
temperature value to be included in the returned
SortedSet. Cannot be NaN, and must be
greater than zero. It must also be a multiple of 0.1
(the smallest temperature difference allowed), though allowances
are made for floating-point imprecision (so for example a
step of 0.4999999 will be treated as
0.5).java.lang.IllegalArgumentException - if any of the parameters are
NaN; if firstValue or
lastValue are outside of their allowed range
(-459.4°F to 5432°F inclusive); if lastValue
is less than firstValue; if step is not
positive; or if step is not a multiple of
0.1 (allowing for slight deviations caused by
floating-point imprecision).celsiusRange(double, double, double),
TemperatureUnit.range(double, double, double)public TemperatureUnit unit()
public boolean isCelsius()
public boolean isFahrenheit()
public final double value()
double representation of the 0.1-precision number
stored internally. Because of rounding, this
might not be exactly the same as the double that this
instance was created with.public final java.lang.String toNumericString()
public final java.lang.String toString()
toString in class java.lang.Objectpublic final boolean equals(java.lang.Object o)
Temperature objects can only be equal if they have the
same units and temperature value (value comparisons being made
after any rounding). A Celsius temperature
and a Fahrenheit temperature can never be equal: this method does not do
any conversion between units.equals in class java.lang.Objectpublic final int hashCode()
equals.hashCode in class java.lang.Objectpublic int compareTo(Temperature comparisonTemperature)
Temperature objects for low-to-high ordering.
If two temperatures have different units but are exactly equivalent (like
how 18°C is exactly equivalent to 64.4°F), the Celsius
temperature will be ordered first.compareTo in interface java.lang.Comparable<Temperature>comparisonTemperature - the Temperature to be compared.
Cannot be null.Temperature is lower than
comparisonTemperature or exactly equivalent with
this temperature being in Celsius and
comparisonTemperature being in Fahrenheit; zero if
this Temperature is equal to
comparisonTemperature (in unit() and in
value()); or a positive integer if this
Temperature is greater than
comparisonTemperature or exactly equivalent with
this temperature being in Fahrenheit and
comparisonTemperature being in Celsius.java.lang.NullPointerException - if comparisonTemperature is
null.
See www.degreedays.net/api/ for more about the Degree Days.net API.
You can sign up for a Degree Days.net API account and read the integration guide that is useful and applicable whether you are using Java or not.