Line data Source code
1 : import 'dart:math';
2 :
3 : class Length implements Comparable<Length> {
4 : /// 1 meter
5 : static const double _one_meter = 0.999999690624;
6 :
7 : ///meters to kilometers: meters * 10^-3
8 : static const double _m_to_km = 0.001;
9 : /// meters to miles: meters * 6.21371192 * 10^-4
10 : static const double _m_to_mi = 6.21371192 * 0.0001;
11 :
12 : ///kilometers to meters: km * 10^3
13 : static const double _km_to_m = 1000.0;
14 : ///miles to meters: mi * 1.6093440 * 10^3
15 : static const double _mi_to_m = 1.6093440 * 1000;
16 : /*
17 : * The value of this Length object in meters.
18 : */
19 : final double _length;
20 :
21 1 : Length.fromMeters({double value : 0.0}) : _length = value;
22 2 : Length.fromKilometers({double value : 0.0}) : _length = value * _km_to_m;
23 2 : Length.fromMiles({double value : 0.0}) : _length = value * _mi_to_m;
24 :
25 2 : double get inMeters => _returnValueOrZero(_length);
26 3 : double get inKilometers => _returnValueOrZero(_length * _m_to_km);
27 3 : double get inMiles => _returnValueOrZero(_length * _m_to_mi);
28 3 : double _returnValueOrZero(num value) => value >= 0.0 ? double.parse(value.toStringAsFixed(6)) : 0.0;
29 :
30 : /**
31 : * Compares this Length to [other], returning zero if the values are equal.
32 : *
33 : * Returns a negative integer if this `Length` is shorter than
34 : * [other], or a positive integer if it is longer.
35 : *
36 : * A negative `Length` is always considered shorter than a positive one.
37 : *
38 : */
39 3 : int compareTo(Length other) => _length.compareTo(other._length);
40 : }
|