Come specificare maxExclusive su struct?
-
19-09-2019 - |
Domanda
Voglio creare un Degrees
struttura per un GPX biblioteca. Nella XSD per GPX ( GPX 1.1 Schema ) degreesType
è definito come minInclusive = 0 e maxExclusive = 360. La struttura ora avrà due public static campi MinValue = 0
e MaxValue = x
:
public struct Degrees : IFormattable, IComparable, IComparable<Degrees>, IEquatable<Degrees>
{
private decimal value;
public static Degrees MinValue = 0M;
//public static Degrees MaxValue = x;
}
Qual è il modo migliore per specificare il valore di x? 360D-1 sarebbe quella di imprecise, 360D-0.001 sarebbe un presupposto che nessuno mai vuole una precisione superiore a 1/1000 gradi.
Soluzione
Mi vengono in mente due approcci:
-
Di 'la tua struct fedelmente rappresentano il fatto che l'intervallo è specificato con una minima inclusiva e di una massima esclusivo; vale a dire, dare il vostro struct
MinInclusive
eMaxExclusive
membri. Questo potrebbe essere considerato come l'insegnamento di tua struct troppo dettaglio attuazione del XSD, se -
Definisci
MaxValue
come il più alto valore didecimal
rappresentabile inferiore a 360. Dal momento chedecimal
è un tipo in virgola mobile decimale, dobbiamo essere un po 'attenti qui, ma pensare che ho ragione nel dire che dal momento che il valore più piccolo possibile è10^-28
, e con 360 abbiamo due potenze di dieci a sinistra del punto decimale, il valore rilevante è360 - 10^-26
, oconst decimal MaxValue = 359.99999999999999999999999999m;
Presumo si sta prendendo cura della conversione da
decimal
aDegree
. Si noti che il carattere di dichiarazione del tipodecimal
èm
oM
-.d
oD
è perdouble