How to specify maxExclusive on struct?
-
19-09-2019 - |
Question
I want to create a structure Degrees
for a GPX library. In the XSD for GPX (GPX 1.1 Schema) degreesType
is defined as minInclusive = 0 and maxExclusive = 360. The structure now shall have two public static fields MinValue = 0
and MaxValue = x
:
public struct Degrees : IFormattable, IComparable, IComparable<Degrees>, IEquatable<Degrees>
{
private decimal value;
public static Degrees MinValue = 0M;
//public static Degrees MaxValue = x;
}
What is the best way to specify the value of x? 360D-1 would be to inaccurate, 360D-0.001 would be an assumption that no one ever wants a better accuracy than 1/1000 degree.
Solution
I can think of two approaches:
Have your struct faithfully represent the fact that the range is specified with an inclusive minimum and an exclusive maximum; ie, give your struct
MinInclusive
andMaxExclusive
members. This might be regarded as teaching your struct too much about the implementation detail of the XSD, thoughDefine
MaxValue
as the highest representabledecimal
value less than 360. Sincedecimal
is a decimal floating point type, we have to be a little careful here, but I think I'm right in saying that since the smallest possible value is10^-28
, and with 360 we have two powers of ten to the left of the decimal point, the relevant value is360 - 10^-26
, orconst decimal MaxValue = 359.99999999999999999999999999m;
I assume you're taking care of the conversion from
decimal
toDegree
. Note that the type declaration character fordecimal
ism
orM
-d
orD
is fordouble
.