Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

Double-Struktur

Stellt eine Gleitkommazahl mit doppelter Genauigkeit dar.

Namespace: System
Assembly: mscorlib (in 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 unterstützt die Verwendung von Strukturen, aber nicht die Deklaration von neuen Strukturen.

Der Werttyp Double stellt eine 64-Bit-Zahl doppelter Genauigkeit mit Werten von -1,79769313486232e308 bis +1,79769313486232e308 dar. Zum Wertebereich gehören weiterhin eine positive und eine negative 0 (null), PositiveInfinity, NegativeInfinity und NaN (Not-a-Number, NaN).

Double entspricht der Norm IEC 60559:1989 (IEEE 754) für binäre Gleitkomma-Arithmetik.

Double stellt Methoden zum Vergleichen von Instanzen dieses Typs, zum Konvertieren des Werts einer Instanz in die entsprechende Zeichenfolgendarstellung und zum Konvertieren der Zeichenfolgenentsprechung einer Zahl in eine Instanz dieses Typs bereit. Informationen über die Steuerung der Zeichenfolgenentsprechung von Werttypen mit Codes für die Formatangabe finden Sie unter Übersicht über Formatierung, Standardmäßige Zahlenformatzeichenfolgen und Benutzerdefinierte Zahlenformatzeichenfolgen.

Verwenden von Gleitkommazahlen

Wenn bei einer binären Operation einer der Operanden ein Double ist, muss der andere Operand ein ganzzahliger Typ oder ein Gleitkommatyp sein (Double oder Single). Wenn der andere Operand kein Double ist, wird er vor Ausführung der Operation in Double konvertiert, und bei Ausführung der Operation werden mindestens der Wertebereich und die Genauigkeit von Double verwendet. Wenn das Ergebnis der Operation numerisch ist, ist der Ergebnistyp Double.

Gleitkommaoperatoren einschließlich des Zuweisungsoperators lösen keine Ausnahmen aus. Stattdessen ist, wie unten beschrieben, das Ergebnis einer Gleitkommaoperation in Ausnahmefällen 0 (null), unendlich oder NaN:

  • Wenn der Betrag des Ergebnisses einer Gleitkommaoperation für das Zielformat zu klein ist, ist das Ergebnis der Operation 0 (null).

  • Wenn der Betrag des Ergebnisses einer Gleitkommaoperation zu groß für das Zielformat ist, ist das Ergebnis der Operation je nach Vorzeichen des Ergebnisses entweder PositiveInfinity oder NegativeInfinity.

  • Wenn eine Gleitkommaoperation ungültig ist, ist das Ergebnis der Operation NaN.

  • Wenn mindestens einer der Operanden einer Gleitkommaoperation NaN ist, ist das Ergebnis der Operation NaN.

Beachten Sie, dass eine Gleitkommazahl nur ein Näherungswert einer Dezimalzahl ist und dass die Genauigkeit einer Gleitkommazahl bestimmt, wie genau die Zahl mit einer Dezimalzahl übereinstimmt. In der Standardeinstellung hat der Double-Wert nur eine Genauigkeit von 15 Ziffern, obwohl intern maximal 17 gültige Ziffern bestimmt werden. Die Genauigkeit einer Gleitkommazahl hat mehrere Auswirkungen:

  • Zwei Gleitkommazahlen, die bei einer bestimmten Genauigkeit als gleich gelten, können bei einer anderen Genauigkeit als ungleich gelten, da sich die letzten signifikanten Ziffern unterscheiden.

  • Eine mathematische oder Vergleichsoperation, bei der eine Gleitkommazahl verwendet wird, führt möglicherweise nicht zu demselben Ergebnis wie bei der Verwendung einer Dezimalzahl, da die Gleitkommazahl eventuell nur ein Näherungswert der Dezimalzahl ist.

  • Bei Verwendung einer Gleitkommazahl könnte ein Wert möglicherweise nicht wiederhergestellt werden. Ein Wert gilt als wiederhergestellt, wenn er in einer Operation in ein anderes Format und anschließend in einer Umkehroperation wieder zu einer Gleitkommazahl konvertiert wird, wobei die resultierende Gleitkommazahl mit der ursprünglichen Gleitkommazahl übereinstimmt. Die Wiederherstellung könnte fehlschlagen, wenn ein oder mehr niederstwertige Ziffern bei einer Konvertierung verloren gehen oder geändert werden.

Schnittstellenimplementierungen

Dieser Typ implementiert die Schnittstellen IComparable, IComparable, IFormattable und IConvertible. Verwenden Sie für Konvertierungen die Convert-Klasse anstelle der expliziten Implementierung der Schnittstellenmember der IConvertible-Schnittstelle für diesen Typ.

Das folgende Codebeispiel veranschaulicht die Verwendung von 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;
        }
    }
}

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0
Anzeigen: