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.

È stato utile?

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 e MaxExclusive membri. Questo potrebbe essere considerato come l'insegnamento di tua struct troppo dettaglio attuazione del XSD, se

  • Definisci MaxValue come il più alto valore di decimal rappresentabile inferiore a 360. Dal momento che decimal è 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, o

    const decimal MaxValue = 359.99999999999999999999999999m;
    

    Presumo si sta prendendo cura della conversione da decimal a Degree. Si noti che il carattere di dichiarazione del tipo decimal è m o M -. d o D è per double

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top