Comment spécifier maxExclusive sur struct?
-
19-09-2019 - |
Question
Je veux créer une structure Degrees
pour une bibliothèque GPX . Dans le XSD GPX ( GPX 1.1 schéma de) la degreesType
est définie comme minInclusive = 0 et maxExclusive = 360. La structure doit maintenant avoir deux static champs MinValue = 0
et MaxValue = x
:
public struct Degrees : IFormattable, IComparable, IComparable<Degrees>, IEquatable<Degrees>
{
private decimal value;
public static Degrees MinValue = 0M;
//public static Degrees MaxValue = x;
}
Quelle est la meilleure façon de spécifier la valeur de x? 360D-1 serait inexactes, 360D-0.001 serait une hypothèse que personne ne veut jamais une meilleure précision que 1/1000 degré.
La solution
Je peux penser à deux approches:
-
Demandez à votre struct représentent fidèlement le fait que la plage est spécifiée avec un minimum et un inclus maximale exclusive; à savoir, donner à votre
MinInclusive
struct etMaxExclusive
membres. Cela peut être considéré comme l'enseignement de votre struct trop sur les détails de mise en œuvre du XSD, si -
Définir
MaxValue
comme la plus haute représentable valeurdecimal
inférieure à 360. Depuisdecimal
est un type à virgule flottante décimal, il faut être un peu prudent, mais je pense Je suis à droite en disant que, depuis la plus petite valeur possible est10^-28
, et 360, nous avons deux puissances de dix à gauche de la virgule décimale, la valeur correspondante est360 - 10^-26
ouconst decimal MaxValue = 359.99999999999999999999999999m;
Je suppose que vous prenez soin de la conversion de
decimal
àDegree
. Notez que le caractère de déclaration de type pourdecimal
estm
ouM
-.d
ouD
est pourdouble