2009-08-25 67 views
0

我想爲GPX庫創建結構Degrees。在XSD對於GPX(GPX 1.1 SchemadegreesType被定義爲minInclusive = 0和maxExclusive = 360的結構現在有兩個公共靜態字段MinValue = 0MaxValue = x如何在結構體上指定maxExclusive?

public struct Degrees : IFormattable, IComparable, IComparable<Degrees>, IEquatable<Degrees> 
{ 
    private decimal value; 

    public static Degrees MinValue = 0M; 
    //public static Degrees MaxValue = x; 
} 

什麼是指定的值的最佳方式X? 360D-1將是不準確的,360D-0.001將是一個假設,沒有人想要比1/1000度更好的精度。

回答

1

我能想到的兩種方法:

  • 有你的結構忠實代表 的範圍被指定 具有包容性的最小和 獨家最大的事實;即給你的 struct MinInclusiveMaxExclusive 成員。這可能會被視爲 教你的結構太多 的XSD的實現細節, 雖然

  • 定義MaxValue作爲最高可表示decimal值小於360由於decimal是一個十進制浮點類型,我們有在這裏稍微小心點,但我認爲我說得很對,因爲最小的可能值是10^-28,而在360我們有兩個十的小數點左邊的冪,相關的值是360 - 10^-26,或

    const decimal MaxValue = 359.99999999999999999999999999m; 
    

    我假設你正在照顧從decimalDegree的轉換。請注意,decimal的類型聲明字符是mM - dDdouble

+0

是的,我知道(和使用)M/m文字,直到今天我被MSDN Library中的主題爲「D文字類型字符」的下列句子激怒:附加文字類型字符D到文字強制它到十進制數據類型。將標識符類型字符@附加到任何標識符將強制它爲十進制。不過,我正在處理必須進行的所有轉換。爲了清楚起見,我沒有包含整個結構定義。 – PVitt 2009-08-25 18:30:12

+0

該頁(http://msdn.microsoft.com/en-us/library/xtba3z33.aspx我猜)是關於VB.net的... – AakashM 2009-08-25 21:47:01