本文件已封存並已停止維護。

Double 結構

表示雙精度浮點數。

命名空間: System
組件: mscorlib (在 mscorlib.dll 中)

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public struct Double : IComparable, IFormattable, IConvertible, 
	IComparable<double>, IEquatable<double>
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class Double extends ValueType implements IComparable, IFormattable, 
	IConvertible, IComparable<double>, IEquatable<double>
JScript 可以支援使用結構,但不允許宣告新的結構。

Double 實值型別表示雙精度 64 位元數字,範圍從 -1.79769313486232e308 到 +1.79769313486232e308,以及正或負零、PositiveInfinityNegativeInfinity 和非數字 (NaN)。

Double 會以二進位浮點算術的 IEC 60559:1989 (IEEE 754) 標準進行編譯。

Double 提供比較這個型別之執行個體的方法,將執行個體的值轉換成它的字串表示,並將數字的字串表示轉換成這個型別的執行個體。如需格式規格程式碼如何控制實值型別之字串表示的詳細資訊,請參閱格式化概觀標準數值格式字串自訂數值格式字串

使用浮點數值

當執行二進位運算時,如果其中一個運算元為 Double,則其他的運算元必須為整數型別或浮點數型別 (DoubleSingle)。在執行運算之前,如果其他運算元不是 Double,它會轉換為 Double,並且該作業的執行至少會使用 Double 範圍和精確度。如果該運算產生數值結果,結果的型別為 Double

浮點數運算子,包括設定 (Assignment) 運算子,不會擲回例外狀況。相反的,在例外的情況下浮點運算的結果為零、無限大或 NaN,如下所述:

  • 如果浮點運算的結果對於目的格式而言太小,則運算的結果為零。

  • 如果浮點運算的結果範圍對於目的格式而言太大,運算的結果為 PositiveInfinityNegativeInfinity,對於結果適當的正負號。

  • 如果浮點運算為無效的,運算的結果為 NaN

  • 如果浮點運算的一個或兩個運算元為 NaN,運算的結果為 NaN

請記住,浮點數值只能近似一個十進位數值,而精確度則決定了該數值與十進位數值近似的程度。根據預設,Double 值只含有 15 個十進位位數的精確度,不過內部維持的最大精確度是 17 位數。浮點數值的精確度會造成數種結果:

  • 兩個看起來相等的浮點數值進行比較時可能並不相等,因為它們的最小有效位數不同。

  • 使用浮點數值來進行的數學或比較作業,與使用十進位數值的結果可能會大不相同,因為浮點數值可能無法與十進位數值完全相近。

  • 當牽涉到浮點數值時,數值即可能無法進行往返作業。當一項作業將原始的浮點數值轉換為另一種形式,接著一項反向作業將此轉換後的形式再轉換回浮點數值,我們稱此數值做了一次往返,而最後的浮點數值應該等於原始的浮點數值。往返可能會失敗,因為在轉換中可能會遺失一個或多個最小有效位數。

介面實作

這個型別會實作 IComparableIComparableIFormattableIConvertible 等介面。使用 Convert 類別來進行轉換,以替代這個型別的外顯介面成員的 IConvertible 實作。

在下列程式碼中,說明了如何使用 Double

/// <summary>
/// Temperature class stores the value as Double
/// and delegates most of the functionality 
/// to the Double implementation.
/// </summary>
public class Temperature : IComparable, IFormattable {
    /// <summary>
    /// IComparable.CompareTo implementation.
    /// </summary>
    public int CompareTo(object obj) {
        if(obj is Temperature) {
            Temperature temp = (Temperature) obj;

            return m_value.CompareTo(temp.m_value);
        }
        
        throw new ArgumentException("object is not a Temperature");    
    }

    /// <summary>
    /// IFormattable.ToString implementation.
    /// </summary>
    public string ToString(string format, IFormatProvider provider) {
        if( format != null ) {
            if( format.Equals("F") ) {
                return String.Format("{0}'F", this.Value.ToString());
            }
            if( format.Equals("C") ) {
                return String.Format("{0}'C", this.Celsius.ToString());
            }
        }

        return m_value.ToString(format, provider);
    }

    /// <summary>
    /// Parses the temperature from a string in form
    /// [ws][sign]digits['F|'C][ws]
    /// </summary>
    public static Temperature Parse(string s, NumberStyles styles, IFormatProvider provider) {
        Temperature temp = new Temperature();

        if( s.TrimEnd(null).EndsWith("'F") ) {
            temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider);
        }
        else if( s.TrimEnd(null).EndsWith("'C") ) {
            temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider);
        }
        else {
            temp.Value = Double.Parse(s, styles, provider);
        }

        return temp;
    }

    // The value holder
    protected double m_value;

    public double Value {
        get {
            return m_value;
        }
        set {
            m_value = value;
        }
    }

    public double Celsius {
        get {
            return (m_value-32.0)/1.8;
        }
        set {
            m_value = 1.8*value+32.0;
        }
    }
}

這個型別的所有公用靜態成員 (即 Visual Basic 中的 Shared 成員) 都是安全執行緒。並非所有的執行個體成員均為安全執行緒。

Windows 98、 Windows 2000 SP4、 Windows CE、 Windows Millennium Edition、 Windows Mobile for Pocket PC、 Windows Mobile for Smartphone、 Windows Server 2003、 Windows XP Media Center Edition、 Windows XP Professional x64 Edition、 Windows XP SP2、 Windows XP Starter Edition

.NET Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱系統需求一節的內容。

.NET Framework

支援版本:2.0、1.1、1.0

.NET Compact Framework

支援版本:2.0、1.0
顯示: