Line data Source code
1 : import 'dart:math';
2 :
3 : class Temperature implements Comparable<Temperature> {
4 : /*
5 : * The value of this Temperature object in celsius degrees.
6 : */
7 : final double _temperature;
8 :
9 : ///celsius to fahrenheit
10 3 : static double _celsius_to_fahrenheit(double value) => value * 9 / 5 + 32;
11 : ///to/from kelvin
12 : static const double _kelvin = 273.15;
13 3 : static double _kelvin_to_celsius(double value) => value < 0 ? -_kelvin : value - _kelvin;
14 :
15 : ///celsius to rankine
16 4 : static double _celsius_to_rankine(double value) => value * 9 / 5 + 32 + 459.67;
17 : ///celsius to romer
18 3 : static double _celsius_to_romer(double value) => value * 21 / 40 + 7.5;
19 :
20 : ///fahrenheit to celsius
21 3 : static double _fahrenheit_to_celsius(double value) => (value - 32) * 5/9;
22 : ///rankine to celsius
23 6 : static double _rankine_to_celsius(double value) => value < 0 ? -_kelvin : (value - 459.67 - 32) * 5/9;
24 : ///romer to celsius
25 3 : static double _romer_to_celsius(double value) => (value - 7.5) * 40/21;
26 :
27 1 : Temperature.fromCelsius({double value : 0.0}): _temperature = value;
28 2 : Temperature.fromFahrenheit({double value : 0.0}): _temperature = _fahrenheit_to_celsius(value);
29 2 : Temperature.fromKelvin({double value : 0.0}): _temperature = _kelvin_to_celsius(value);
30 2 : Temperature.fromRankine({double value : 0.0}): _temperature = _rankine_to_celsius(value);
31 2 : Temperature.fromRomer({double value : 0.0}): _temperature = _romer_to_celsius(value);
32 :
33 :
34 2 : double get inCelsius => _returnValue(_temperature);
35 3 : double get inFahrenheit => _returnValue(_celsius_to_fahrenheit(_temperature));
36 3 : double get inKelvin => _returnValue(_temperature + _kelvin);
37 3 : double get inRankine => _returnValue(_celsius_to_rankine(_temperature));
38 3 : double get inRomer => _returnValue(_celsius_to_romer(_temperature));
39 :
40 2 : double _returnValue(num value) => double.parse(value.toStringAsFixed(6));
41 :
42 : /**
43 : * Compares this Temperature to [other], returning zero if the values are equal.
44 : *
45 : * Returns a negative integer if this `Temperature` is shorter than
46 : * [other], or a positive integer if it is longer.
47 : *
48 : * A negative `Temperature` is always considered shorter than a positive one.
49 : *
50 : */
51 3 : int compareTo(Temperature other) => _temperature.compareTo(other._temperature);
52 : }
|