Single Struktur

Definition

Stellt eine Gleitkommazahl mit einfacher Genauigkeit dar.

public value class float : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public value class float : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, IUtf8SpanParsable<float>, System::Numerics::IAdditionOperators<float, float, float>, System::Numerics::IAdditiveIdentity<float, float>, System::Numerics::IBinaryFloatingPointIeee754<float>, System::Numerics::IBinaryNumber<float>, System::Numerics::IBitwiseOperators<float, float, float>, System::Numerics::IComparisonOperators<float, float, bool>, System::Numerics::IDecrementOperators<float>, System::Numerics::IDivisionOperators<float, float, float>, System::Numerics::IEqualityOperators<float, float, bool>, System::Numerics::IExponentialFunctions<float>, System::Numerics::IFloatingPoint<float>, System::Numerics::IFloatingPointConstants<float>, System::Numerics::IFloatingPointIeee754<float>, System::Numerics::IHyperbolicFunctions<float>, System::Numerics::IIncrementOperators<float>, System::Numerics::ILogarithmicFunctions<float>, System::Numerics::IMinMaxValue<float>, System::Numerics::IModulusOperators<float, float, float>, System::Numerics::IMultiplicativeIdentity<float, float>, System::Numerics::IMultiplyOperators<float, float, float>, System::Numerics::INumber<float>, System::Numerics::INumberBase<float>, System::Numerics::IPowerFunctions<float>, System::Numerics::IRootFunctions<float>, System::Numerics::ISignedNumber<float>, System::Numerics::ISubtractionOperators<float, float, float>, System::Numerics::ITrigonometricFunctions<float>, System::Numerics::IUnaryNegationOperators<float, float>, System::Numerics::IUnaryPlusOperators<float, float>
public value class float : IComparable, IComparable<float>, IConvertible, IEquatable<float>, ISpanFormattable
public value class float : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, System::Numerics::IAdditionOperators<float, float, float>, System::Numerics::IAdditiveIdentity<float, float>, System::Numerics::IBinaryFloatingPointIeee754<float>, System::Numerics::IBinaryNumber<float>, System::Numerics::IBitwiseOperators<float, float, float>, System::Numerics::IComparisonOperators<float, float, bool>, System::Numerics::IDecrementOperators<float>, System::Numerics::IDivisionOperators<float, float, float>, System::Numerics::IEqualityOperators<float, float, bool>, System::Numerics::IExponentialFunctions<float>, System::Numerics::IFloatingPoint<float>, System::Numerics::IFloatingPointConstants<float>, System::Numerics::IFloatingPointIeee754<float>, System::Numerics::IHyperbolicFunctions<float>, System::Numerics::IIncrementOperators<float>, System::Numerics::ILogarithmicFunctions<float>, System::Numerics::IMinMaxValue<float>, System::Numerics::IModulusOperators<float, float, float>, System::Numerics::IMultiplicativeIdentity<float, float>, System::Numerics::IMultiplyOperators<float, float, float>, System::Numerics::INumber<float>, System::Numerics::INumberBase<float>, System::Numerics::IPowerFunctions<float>, System::Numerics::IRootFunctions<float>, System::Numerics::ISignedNumber<float>, System::Numerics::ISubtractionOperators<float, float, float>, System::Numerics::ITrigonometricFunctions<float>, System::Numerics::IUnaryNegationOperators<float, float>, System::Numerics::IUnaryPlusOperators<float, float>
public value class float : IComparable, IConvertible, IFormattable
public value class float : IComparable, IComparable<float>, IEquatable<float>, IFormattable
public struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public readonly struct Single : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, IUtf8SpanParsable<float>, System.Numerics.IAdditionOperators<float,float,float>, System.Numerics.IAdditiveIdentity<float,float>, System.Numerics.IBinaryFloatingPointIeee754<float>, System.Numerics.IBinaryNumber<float>, System.Numerics.IBitwiseOperators<float,float,float>, System.Numerics.IComparisonOperators<float,float,bool>, System.Numerics.IDecrementOperators<float>, System.Numerics.IDivisionOperators<float,float,float>, System.Numerics.IEqualityOperators<float,float,bool>, System.Numerics.IExponentialFunctions<float>, System.Numerics.IFloatingPoint<float>, System.Numerics.IFloatingPointConstants<float>, System.Numerics.IFloatingPointIeee754<float>, System.Numerics.IHyperbolicFunctions<float>, System.Numerics.IIncrementOperators<float>, System.Numerics.ILogarithmicFunctions<float>, System.Numerics.IMinMaxValue<float>, System.Numerics.IModulusOperators<float,float,float>, System.Numerics.IMultiplicativeIdentity<float,float>, System.Numerics.IMultiplyOperators<float,float,float>, System.Numerics.INumber<float>, System.Numerics.INumberBase<float>, System.Numerics.IPowerFunctions<float>, System.Numerics.IRootFunctions<float>, System.Numerics.ISignedNumber<float>, System.Numerics.ISubtractionOperators<float,float,float>, System.Numerics.ITrigonometricFunctions<float>, System.Numerics.IUnaryNegationOperators<float,float>, System.Numerics.IUnaryPlusOperators<float,float>
public readonly struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public readonly struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, ISpanFormattable
public readonly struct Single : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, System.Numerics.IAdditionOperators<float,float,float>, System.Numerics.IAdditiveIdentity<float,float>, System.Numerics.IBinaryFloatingPointIeee754<float>, System.Numerics.IBinaryNumber<float>, System.Numerics.IBitwiseOperators<float,float,float>, System.Numerics.IComparisonOperators<float,float,bool>, System.Numerics.IDecrementOperators<float>, System.Numerics.IDivisionOperators<float,float,float>, System.Numerics.IEqualityOperators<float,float,bool>, System.Numerics.IExponentialFunctions<float>, System.Numerics.IFloatingPoint<float>, System.Numerics.IFloatingPointConstants<float>, System.Numerics.IFloatingPointIeee754<float>, System.Numerics.IHyperbolicFunctions<float>, System.Numerics.IIncrementOperators<float>, System.Numerics.ILogarithmicFunctions<float>, System.Numerics.IMinMaxValue<float>, System.Numerics.IModulusOperators<float,float,float>, System.Numerics.IMultiplicativeIdentity<float,float>, System.Numerics.IMultiplyOperators<float,float,float>, System.Numerics.INumber<float>, System.Numerics.INumberBase<float>, System.Numerics.IPowerFunctions<float>, System.Numerics.IRootFunctions<float>, System.Numerics.ISignedNumber<float>, System.Numerics.ISubtractionOperators<float,float,float>, System.Numerics.ITrigonometricFunctions<float>, System.Numerics.IUnaryNegationOperators<float,float>, System.Numerics.IUnaryPlusOperators<float,float>
[System.Serializable]
public struct Single : IComparable, IConvertible, IFormattable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public struct Single : IComparable, IComparable<float>, IEquatable<float>, IFormattable
type single = struct
    interface IConvertible
    interface IFormattable
type single = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<single>
    interface ISpanFormattable
    interface ISpanParsable<single>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<single>
    interface IAdditionOperators<single, single, single>
    interface IAdditiveIdentity<single, single>
    interface IBinaryFloatingPointIeee754<single>
    interface IBinaryNumber<single>
    interface IBitwiseOperators<single, single, single>
    interface IComparisonOperators<single, single, bool>
    interface IEqualityOperators<single, single, bool>
    interface IDecrementOperators<single>
    interface IDivisionOperators<single, single, single>
    interface IIncrementOperators<single>
    interface IModulusOperators<single, single, single>
    interface IMultiplicativeIdentity<single, single>
    interface IMultiplyOperators<single, single, single>
    interface INumber<single>
    interface INumberBase<single>
    interface ISubtractionOperators<single, single, single>
    interface IUnaryNegationOperators<single, single>
    interface IUnaryPlusOperators<single, single>
    interface IExponentialFunctions<single>
    interface IFloatingPointConstants<single>
    interface IFloatingPoint<single>
    interface ISignedNumber<single>
    interface IFloatingPointIeee754<single>
    interface IHyperbolicFunctions<single>
    interface ILogarithmicFunctions<single>
    interface IPowerFunctions<single>
    interface IRootFunctions<single>
    interface ITrigonometricFunctions<single>
    interface IMinMaxValue<single>
type single = struct
    interface IConvertible
    interface ISpanFormattable
    interface IFormattable
type single = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<single>
    interface ISpanFormattable
    interface ISpanParsable<single>
    interface IAdditionOperators<single, single, single>
    interface IAdditiveIdentity<single, single>
    interface IBinaryFloatingPointIeee754<single>
    interface IBinaryNumber<single>
    interface IBitwiseOperators<single, single, single>
    interface IComparisonOperators<single, single, bool>
    interface IEqualityOperators<single, single, bool>
    interface IDecrementOperators<single>
    interface IDivisionOperators<single, single, single>
    interface IIncrementOperators<single>
    interface IModulusOperators<single, single, single>
    interface IMultiplicativeIdentity<single, single>
    interface IMultiplyOperators<single, single, single>
    interface INumber<single>
    interface INumberBase<single>
    interface ISubtractionOperators<single, single, single>
    interface IUnaryNegationOperators<single, single>
    interface IUnaryPlusOperators<single, single>
    interface IExponentialFunctions<single>
    interface IFloatingPointConstants<single>
    interface IFloatingPoint<single>
    interface ISignedNumber<single>
    interface IFloatingPointIeee754<single>
    interface IHyperbolicFunctions<single>
    interface ILogarithmicFunctions<single>
    interface IPowerFunctions<single>
    interface IRootFunctions<single>
    interface ITrigonometricFunctions<single>
    interface IMinMaxValue<single>
type single = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<single>
    interface ISpanFormattable
    interface ISpanParsable<single>
    interface IAdditionOperators<single, single, single>
    interface IAdditiveIdentity<single, single>
    interface IBinaryFloatingPointIeee754<single>
    interface IBinaryNumber<single>
    interface IBitwiseOperators<single, single, single>
    interface IComparisonOperators<single, single, bool>
    interface IEqualityOperators<single, single, bool>
    interface IDecrementOperators<single>
    interface IDivisionOperators<single, single, single>
    interface IIncrementOperators<single>
    interface IModulusOperators<single, single, single>
    interface IMultiplicativeIdentity<single, single>
    interface IMultiplyOperators<single, single, single>
    interface INumber<single>
    interface INumberBase<single>
    interface ISubtractionOperators<single, single, single>
    interface IUnaryNegationOperators<single, single>
    interface IUnaryPlusOperators<single, single>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<single>
    interface IExponentialFunctions<single>
    interface IFloatingPointConstants<single>
    interface IFloatingPoint<single>
    interface ISignedNumber<single>
    interface IFloatingPointIeee754<single>
    interface IHyperbolicFunctions<single>
    interface ILogarithmicFunctions<single>
    interface IPowerFunctions<single>
    interface IRootFunctions<single>
    interface ITrigonometricFunctions<single>
    interface IMinMaxValue<single>
[<System.Serializable>]
type single = struct
    interface IFormattable
    interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type single = struct
    interface IFormattable
    interface IConvertible
type single = struct
    interface IFormattable
Public Structure Single
Implements IComparable, IComparable(Of Single), IConvertible, IEquatable(Of Single), IFormattable
Public Structure Single
Implements IAdditionOperators(Of Single, Single, Single), IAdditiveIdentity(Of Single, Single), IBinaryFloatingPointIeee754(Of Single), IBinaryNumber(Of Single), IBitwiseOperators(Of Single, Single, Single), IComparable(Of Single), IComparisonOperators(Of Single, Single, Boolean), IConvertible, IDecrementOperators(Of Single), IDivisionOperators(Of Single, Single, Single), IEqualityOperators(Of Single, Single, Boolean), IEquatable(Of Single), IExponentialFunctions(Of Single), IFloatingPoint(Of Single), IFloatingPointConstants(Of Single), IFloatingPointIeee754(Of Single), IHyperbolicFunctions(Of Single), IIncrementOperators(Of Single), ILogarithmicFunctions(Of Single), IMinMaxValue(Of Single), IModulusOperators(Of Single, Single, Single), IMultiplicativeIdentity(Of Single, Single), IMultiplyOperators(Of Single, Single, Single), INumber(Of Single), INumberBase(Of Single), IParsable(Of Single), IPowerFunctions(Of Single), IRootFunctions(Of Single), ISignedNumber(Of Single), ISpanParsable(Of Single), ISubtractionOperators(Of Single, Single, Single), ITrigonometricFunctions(Of Single), IUnaryNegationOperators(Of Single, Single), IUnaryPlusOperators(Of Single, Single), IUtf8SpanParsable(Of Single)
Public Structure Single
Implements IComparable, IComparable(Of Single), IConvertible, IEquatable(Of Single), ISpanFormattable
Public Structure Single
Implements IAdditionOperators(Of Single, Single, Single), IAdditiveIdentity(Of Single, Single), IBinaryFloatingPointIeee754(Of Single), IBinaryNumber(Of Single), IBitwiseOperators(Of Single, Single, Single), IComparable(Of Single), IComparisonOperators(Of Single, Single, Boolean), IConvertible, IDecrementOperators(Of Single), IDivisionOperators(Of Single, Single, Single), IEqualityOperators(Of Single, Single, Boolean), IEquatable(Of Single), IExponentialFunctions(Of Single), IFloatingPoint(Of Single), IFloatingPointConstants(Of Single), IFloatingPointIeee754(Of Single), IHyperbolicFunctions(Of Single), IIncrementOperators(Of Single), ILogarithmicFunctions(Of Single), IMinMaxValue(Of Single), IModulusOperators(Of Single, Single, Single), IMultiplicativeIdentity(Of Single, Single), IMultiplyOperators(Of Single, Single, Single), INumber(Of Single), INumberBase(Of Single), IParsable(Of Single), IPowerFunctions(Of Single), IRootFunctions(Of Single), ISignedNumber(Of Single), ISpanParsable(Of Single), ISubtractionOperators(Of Single, Single, Single), ITrigonometricFunctions(Of Single), IUnaryNegationOperators(Of Single, Single), IUnaryPlusOperators(Of Single, Single)
Public Structure Single
Implements IComparable, IConvertible, IFormattable
Public Structure Single
Implements IComparable, IComparable(Of Single), IEquatable(Of Single), IFormattable
Vererbung
Single
Attribute
Implementiert
IComparable IComparable<Single> IConvertible IEquatable<Single> IFormattable IComparable<TSelf> IEquatable<TSelf> IParsable<Single> IParsable<TSelf> ISpanFormattable ISpanParsable<Single> ISpanParsable<TSelf> IUtf8SpanFormattable IUtf8SpanParsable<Single> IUtf8SpanParsable<TSelf> IAdditionOperators<Single,Single,Single> IAdditionOperators<TSelf,TSelf,TSelf> IAdditiveIdentity<Single,Single> IAdditiveIdentity<TSelf,TSelf> IBinaryFloatingPointIeee754<Single> IBinaryNumber<Single> IBinaryNumber<TSelf> IBitwiseOperators<Single,Single,Single> IBitwiseOperators<TSelf,TSelf,TSelf> IComparisonOperators<Single,Single,Boolean> IComparisonOperators<TSelf,TSelf,Boolean> IDecrementOperators<Single> IDecrementOperators<TSelf> IDivisionOperators<Single,Single,Single> IDivisionOperators<TSelf,TSelf,TSelf> IEqualityOperators<Single,Single,Boolean> IEqualityOperators<TSelf,TOther,TResult> IEqualityOperators<TSelf,TSelf,Boolean> IExponentialFunctions<Single> IExponentialFunctions<TSelf> IFloatingPoint<Single> IFloatingPoint<TSelf> IFloatingPointConstants<Single> IFloatingPointConstants<TSelf> IFloatingPointIeee754<Single> IFloatingPointIeee754<TSelf> IHyperbolicFunctions<Single> IHyperbolicFunctions<TSelf> IIncrementOperators<Single> IIncrementOperators<TSelf> ILogarithmicFunctions<Single> ILogarithmicFunctions<TSelf> IMinMaxValue<Single> IModulusOperators<Single,Single,Single> IModulusOperators<TSelf,TSelf,TSelf> IMultiplicativeIdentity<Single,Single> IMultiplicativeIdentity<TSelf,TSelf> IMultiplyOperators<Single,Single,Single> IMultiplyOperators<TSelf,TSelf,TSelf> INumber<Single> INumber<TSelf> INumberBase<Single> INumberBase<TSelf> IPowerFunctions<Single> IPowerFunctions<TSelf> IRootFunctions<Single> IRootFunctions<TSelf> ISignedNumber<Single> ISignedNumber<TSelf> ISubtractionOperators<Single,Single,Single> ISubtractionOperators<TSelf,TSelf,TSelf> ITrigonometricFunctions<Single> ITrigonometricFunctions<TSelf> IUnaryNegationOperators<Single,Single> IUnaryNegationOperators<TSelf,TSelf> IUnaryPlusOperators<Single,Single> IUnaryPlusOperators<TSelf,TSelf>

Hinweise

Der Single Werttyp stellt eine 32-Bit-Zahl in einfacher Genauigkeit dar, mit Werten, die von negativen 3,402823e38 bis zu positiven 3,402823e38 reichen, sowie positiver oder negativer Null, PositiveInfinity, NegativeInfinity und keine Zahl (NaN). Es soll Werte darstellen, die extrem groß sind (z. B. Entfernungen zwischen Planeten oder Galaxien) oder extrem klein (z. B. die molekulare Masse einer Substanz in Kilogramm) und die oft ungenau sind (z. B. der Abstand von der Erde zu einem anderen Sonnensystem). Der Single Typ entspricht dem IEC 60559:1989 (IEEE 754)-Standard für binäre Gleitkommaarithmetik.

System.Single stellt Methoden zum Vergleichen von Instanzen dieses Typs bereit, um den Wert einer Instanz in die Zeichenfolgendarstellung zu konvertieren und die Zeichenfolgendarstellung einer Zahl in eine Instanz dieses Typs zu konvertieren. Informationen dazu, wie Formatspezifikationscodes die Zeichenfolgendarstellung von Werttypen steuern, finden Sie unter Formatierungstypen, Standard-Zahlenformatzeichenfolgen und benutzerdefinierte numerische Formatzeichenfolgen.

Fließkommadarstellung und Genauigkeit

Der Single Datentyp speichert Gleitkommawerte mit einfacher Genauigkeit in einem 32-Bit-Binärformat, wie in der folgenden Tabelle dargestellt:

Bauteil Binäre Ziffern
Signifikant oder Mantisse 0-22
Exponent 23-30
Vorzeichen (0 = positiv, 1 = negativ) 31

Ebenso wie Dezimalbrüche bestimmte Bruchwerte (z. B. 1/3 oder Math.PI) nicht präzise darstellen können, können binäre Brüche einige Bruchwerte nicht darstellen. Beispielsweise wird 2/10, das genau durch 0,2 als Dezimalbruch dargestellt wird, durch .001100 als binären Bruch dargestellt, wobei sich das Muster "1100" unendlich wiederholt. In diesem Fall stellt der Gleitkommawert eine ungenaue Darstellung der Zahl dar, die er repräsentiert. Durch das Ausführen zusätzlicher mathematischer Vorgänge für den ursprünglichen Gleitkommawert erhöht sich häufig der Mangel an Genauigkeit. Wenn Sie beispielsweise die Ergebnisse der Multiplikation von 0,3 mit 10 und der Addition von 0,3 zu 0,3 neunmal vergleichen, werden Sie feststellen, dass die Addition das weniger genaue Ergebnis liefert, da sie acht Rechenoperationen mehr umfasst als die Multiplikation. Beachten Sie, dass diese Ungleichkeit nur angezeigt wird, wenn Sie die beiden Single Werte mithilfe der standardmäßigen Zeichenfolge für numerische Formate "R" anzeigen, die bei Bedarf alle 9 Ziffern der Genauigkeit anzeigt, die vom Single Typ unterstützt werden.

using System;

public class Example12
{
    public static void Main()
    {
        Single value = .2f;
        Single result1 = value * 10f;
        Single result2 = 0f;
        for (int ctr = 1; ctr <= 10; ctr++)
            result2 += value;

        Console.WriteLine($".2 * 10:           {result1:R}");
        Console.WriteLine($".2 Added 10 times: {result2:R}");
    }
}
// The example displays the following output:
//       .2 * 10:           2
//       .2 Added 10 times: 2.0000002
let value = 0.2f
let result1 = value * 10f
let mutable result2 = 0f
for _ = 1 to 10 do
    result2 <- result2 + value

printfn $".2 * 10:           {result1:R}"
printfn $".2 Added 10 times: {result2:R}"
// The example displays the following output:
//       .2 * 10:           2
//       .2 Added 10 times: 2.00000024
Module Example13
    Public Sub Main()
        Dim value As Single = 0.2
        Dim result1 As Single = value * 10
        Dim result2 As Single
        For ctr As Integer = 1 To 10
            result2 += value
        Next
        Console.WriteLine(".2 * 10:           {0:R}", result1)
        Console.WriteLine(".2 Added 10 times: {0:R}", result2)
    End Sub
End Module

' The example displays the following output:
'       .2 * 10:           2
'       .2 Added 10 times: 2.0000002

Da einige Zahlen nicht genau als bruchhafte Binärwerte dargestellt werden können, können Gleitkommazahlen reale Zahlen nur ungefähr darstellen.

Alle Gleitkommazahlen weisen eine begrenzte Anzahl signifikanter Ziffern auf, wodurch auch bestimmt wird, wie genau ein Gleitkommawert eine reelle Zahl annähert. Ein Single-Wert weist bis zu 7 Dezimalziffern der Genauigkeit auf, obwohl maximal 9 Ziffern intern verwaltet werden. Dies bedeutet, dass bei einigen Gleitkommavorgängen möglicherweise die Genauigkeit fehlt, um einen Gleitkommawert zu ändern. Das folgende Beispiel definiert einen großen Gleitkommawert mit einfacher Genauigkeit und addiert dann das Produkt aus Single.Epsilon und einer Billiarde dazu. Das Produkt ist jedoch zu klein, um die ursprüngliche Fließkommazahl zu verändern. Seine am wenigsten signifikante Ziffer ist Tausendstel, während die wichtigste Ziffer im Produkt 10-30 ist.

using System;

public class Example13
{
    public static void Main()
    {
        Single value = 123.456f;
        Single additional = Single.Epsilon * 1e15f;
        Console.WriteLine($"{value} + {additional} = {value + additional}");
    }
}

// The example displays the following output:
//    123.456 + 1.401298E-30 = 123.456
open System

let value = 123.456f
let additional = Single.Epsilon * 1e15f
printfn $"{value} + {additional} = {value + additional}"
// The example displays the following output:
//    123.456 + 1.401298E-30 = 123.456
Module Example
   Public Sub Main()
      Dim value As Single = 123.456
      Dim additional As Single = Single.Epsilon * 1e15
      Console.WriteLine($"{value} + {additional} = {value + additional}")
   End Sub
End Module
' The example displays the following output:
'   123.456 + 1.401298E-30 = 123.456

Die begrenzte Genauigkeit einer Gleitkommazahl hat mehrere Folgen:

  • Zwei Gleitkommazahlen, die für eine bestimmte Genauigkeit gleich erscheinen, können nicht gleich verglichen werden, da ihre am wenigsten signifikanten Ziffern unterschiedlich sind. Im folgenden Beispiel werden eine Reihe von Zahlen addiert, und ihre Summe wird mit der erwarteten Summe verglichen. Ein Aufruf der Equals Methode gibt an, dass die Werte nicht gleich sind.

    using System;
    
    public class PrecisionList3Example
    {
        public static void Main()
        {
            Single[] values = { 10.01f, 2.88f, 2.88f, 2.88f, 9.0f };
            Single result = 27.65f;
            Single total = 0f;
            foreach (var value in values)
                total += value;
    
            if (total.Equals(result))
                Console.WriteLine("The sum of the values equals the total.");
            else
                Console.WriteLine($"The sum of the values ({total}) does not equal the total ({result}).");
        }
    }
    
    // The example displays the following output on .NET:
    //      The sum of the values (27.650002) does not equal the total (27.65).
    // The example displays the following output on .NET Framework:
    //      The sum of the values (27.65) does not equal the total (27.65).
    
    let values = [| 10.01f; 2.88f; 2.88f; 2.88f; 9f |]
    let result = 27.65f
    let mutable total = 0f
    for value in values do
        total <- total + value
    
    if total.Equals result then
        printfn "The sum of the values equals the total."
    else
        printfn "The sum of the values ({total}) does not equal the total ({result})."
    // The example displays the following output:
    //      The sum of the values (27.65) does not equal the total (27.65).   
    //
    // If the index items in the Console.WriteLine statement are changed to {0:R},
    // the example displays the following output:
    //       The sum of the values (27.6500015) does not equal the total (27.65).
    
        Dim values() As Single = {10.01, 2.88, 2.88, 2.88, 9.0}
        Dim result As Single = 27.65
        Dim total As Single
        For Each value In values
            total += value
        Next
        If total.Equals(result) Then
            Console.WriteLine("The sum of the values equals the total.")
        Else
            Console.WriteLine($"The sum of the values ({total}) does not equal the total ({result}).")
        End If
    End Sub
    
    ' The example displays the following output on .NET:
    '      The sum of the values (27.650002) does not equal the total (27.65).
    ' The example displays the following output on .NET Framework:
    '      The sum of the values (27.65) does not equal the total (27.65).
    

    Die beiden Werte sind aufgrund eines Genauigkeitsverlusts während der Additionsvorgänge ungleich. In diesem Fall kann das Problem behoben werden, indem die Math.Round(Double, Int32) Methode aufgerufen wird, um die Single Werte auf die gewünschte Genauigkeit zu runden, bevor der Vergleich ausgeführt wird.

  • Ein mathematischer oder Vergleichsvorgang, der eine Gleitkommazahl verwendet, liefert möglicherweise nicht dasselbe Ergebnis, wenn eine Dezimalzahl verwendet wird, da die binäre Gleitkommazahl möglicherweise nicht der Dezimalzahl entspricht. Ein vorheriges Beispiel hat dies veranschaulicht, indem das Ergebnis der Multiplikation von .3 mit 10 und der Addition von .3 zu .3 neunmal angezeigt wurde.

    Wenn die Genauigkeit in numerischen Vorgängen mit Bruchwerten wichtig ist, verwenden Sie den Decimal Typ anstelle des Single Typs. Wenn die Genauigkeit bei numerischen Vorgängen mit integralen Werten, die über den Bereich der Typen Int64 oder UInt64 hinausgehen, wichtig ist, verwenden Sie den BigInteger Typ.

  • Single Werte haben weniger Genauigkeit als Double Werte. Ein Single Wert, der in einen scheinbar gleichwertigen Double Wert konvertiert wird, entspricht häufig nicht dem Double Wert aufgrund von Genauigkeitsunterschieden. Im folgenden Beispiel wird das Ergebnis identischer Divisionsvorgänge einem Double Wert und einem Single Wert zugewiesen. Nach dem Umwandeln des Single Werts in einen Double, ein Vergleich der beiden Werte zeigt, dass sie ungleich sind.

    using System;
    
    public class Example9
    {
        public static void Run()
        {
            double value1 = 1 / 3.0;
            float sValue2 = 1 / 3.0f;
            double value2 = (double)sValue2;
            Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
        }
    }
    
    // The example displays the following output:
    //        0.33333333333333331 = 0.3333333432674408: False
    
    open System
    
    let value1 = 1. / 3.
    let sValue2 = 1f /3f
    
    let value2 = double sValue2
    printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
    // The example displays the following output:
    //        0.33333333333333331 = 0.3333333432674408: False
    
    Module Example10
        Public Sub Run()
            Dim value1 As Double = 1 / 3
            Dim sValue2 As Single = 1 / 3
            Dim value2 As Double = CDbl(sValue2)
            Console.WriteLine("{0} = {1}: {2}", value1, value2, value1.Equals(value2))
        End Sub
    End Module
    ' The example displays the following output:
    '       0.33333333333333331 = 0.3333333432674408: False
    

    Um dieses Problem zu vermeiden, verwenden Sie entweder den Double Datentyp anstelle des Single Datentyps, oder verwenden Sie die Round Methode, damit beide Werte dieselbe Genauigkeit aufweisen.

Testen auf Gleichheit

Um gleich zu sein, müssen zwei Single Werte identische Werte darstellen. Aufgrund von Unterschieden in der Genauigkeit zwischen Werten oder aufgrund eines Genauigkeitsverlusts bei einem oder beiden Werten ergeben sich oft Ungleichheiten bei Gleitkommazahlen, da sich ihre am wenigsten signifikanten Stellen unterscheiden. Daher ergeben Aufrufe der Equals Methode, um zu bestimmen, ob zwei Werte gleich sind, oder Aufrufe der CompareTo Methode, um die Beziehung zwischen zwei Single Werten zu bestimmen, häufig unerwartete Ergebnisse. Dies zeigt sich im folgenden Beispiel, wobei zwei scheinbar gleiche Single Werte ungleich sind, da der erste Wert 7 Ziffern genauigkeitsmäßig hat, während der zweite Wert 9 hat.

using System;

public class Example
{
   public static void Main()
   {
      float value1 = .3333333f;
      float value2 = 1.0f/3;
      Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
   }
}
// The example displays the following output:
//        0.3333333 = 0.333333343: False
let value1 = 0.3333333f
let value2 = 1f / 3f
printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
// The example displays the following output:
//        0.3333333 = 0.333333343: False
Module Example1
    Public Sub Main()
        Dim value1 As Single = 0.3333333
        Dim value2 As Single = 1 / 3
        Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2, value1.Equals(value2))
    End Sub
End Module
' The example displays the following output:
'       0.3333333 = 0.333333343: False

Berechnete Werte, die unterschiedlichen Codepfaden folgen und auf unterschiedliche Weise bearbeitet werden, belegen häufig ungleiche Werte. Im folgenden Beispiel wird ein Single-Wert quadriert und dann wird die Quadratwurzel berechnet, um den ursprünglichen Wert wiederherzustellen. Ein zweites Single wird mit 3,51 multipliziert und quadriert, bevor die Quadratwurzel des Ergebnisses durch 3,51 dividiert wird, um den ursprünglichen Wert wiederherzustellen. Obwohl die beiden Werte identisch erscheinen, gibt ein Aufruf der Equals(Single) Methode an, dass sie nicht gleich sind.

float value1 = 10.201438f;
value1 = (float)Math.Sqrt((float)Math.Pow(value1, 2));
float value2 = (float)Math.Pow((float)value1 * 3.51f, 2);
value2 = ((float)Math.Sqrt(value2)) / 3.51f;
Console.WriteLine($"{value1} = {value2}: {value1.Equals(value2)}");

// The example displays the following output on .NET:
//       10.201438 = 10.201439: False
// The example displays the following output on .NET Framework:
//       10.20144 = 10.20144: False
let value1 = 
    10.201438f ** 2f
    |> sqrt

let value2 =
   ((value1 * 3.51f) ** 2f |> sqrt) / 3.51f

printfn $"{value1} = {value2}: {value1.Equals value2}\n" 
printfn $"{value1:G9} = {value2:G9}"
// The example displays the following output:
//       10.20144 = 10.20144: False
//       
//       10.201438 = 10.2014389
Dim value1 As Single = 10.201438
value1 = CSng(Math.Sqrt(CSng(Math.Pow(value1, 2))))
Dim value2 As Single = CSng(Math.Pow(value1 * CSng(3.51), 2))
value2 = CSng(Math.Sqrt(value2) / CSng(3.51))
Console.WriteLine("{0} = {1}: {2}",
                value1, value2, value1.Equals(value2))

' The example displays the following output on .NET:
'       10.201438 = 10.201439: False
' The example displays the following output on .NET Framework:
'       10.20144 = 10.20144: False

In Fällen, in denen ein Genauigkeitsverlust wahrscheinlich das Ergebnis eines Vergleichs beeinflusst, können Sie die folgenden Techniken anstelle der Verwendung der Methoden Equals oder CompareTo einsetzen.

  • Rufen Sie die Math.Round Methode auf, um sicherzustellen, dass beide Werte dieselbe Genauigkeit aufweisen. Im folgenden Beispiel wird ein vorheriges Beispiel so geändert, dass dieser Ansatz verwendet wird, sodass zwei Bruchwerte gleichwertig sind.

    float value1 = .3333333f;
    float value2 = 1.0f / 3;
    int precision = 7;
    value1 = (float)Math.Round(value1, precision);
    value2 = (float)Math.Round(value2, precision);
    Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
    
    // The example displays the following output:
    //        0.3333333 = 0.3333333: True
    
    open System
    
    let value1 = 0.3333333f
    let value2 = 1f / 3f
    let precision = 7
    let value1r = Math.Round(float value1, precision) |> float32
    let value2r = Math.Round(float value2, precision) |> float32
    printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
    // The example displays the following output:
    //        0.3333333 = 0.3333333: True
    
    Module Example3
        Public Sub Main()
            Dim value1 As Single = 0.3333333
            Dim value2 As Single = 1 / 3
            Dim precision As Integer = 7
            value1 = CSng(Math.Round(value1, precision))
            value2 = CSng(Math.Round(value2, precision))
            Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2, value1.Equals(value2))
        End Sub
    End Module
    ' The example displays the following output:
    '       0.3333333 = 0.3333333: True
    

    Das Problem der Genauigkeit gilt weiterhin für das Runden von Mittelpunktswerten. Weitere Informationen finden Sie in der Math.Round(Double, Int32, MidpointRounding) Methode.

  • Testen Sie die ungefähre Gleichheit anstelle der Gleichheit. Für diese Technik müssen Sie entweder einen absoluten Betrag definieren, um den sich die beiden Werte unterscheiden können, aber dennoch gleich sind oder dass Sie einen relativen Betrag definieren, um den der kleinere Wert vom größeren Wert abweichen kann.

    Warning

    Single.Epsilon wird manchmal als absolutes Maß für den Abstand zwischen zwei Single Werten beim Testen auf Gleichheit verwendet. Single.Epsilon misst jedoch den kleinsten möglichen Wert, der zu einem Single addiert oder von diesem subtrahiert werden kann, dessen Wert Null ist. Für die meisten positiven und negativen Single Werte ist der Wert Single.Epsilon zu klein, um erkannt zu werden. Aus diesem Grund wird die Verwendung in Tests für Gleichheit nicht empfohlen, mit Ausnahme von Werten, die null sind.

    Im folgenden Beispiel wird der letztere Ansatz verwendet, um eine IsApproximatelyEqual Methode zu definieren, die den relativen Unterschied zwischen zwei Werten testet. Sie kontrastiert auch das Ergebnis von Aufrufen der IsApproximatelyEqual Methode und der Equals(Single) Methode.

    public static void Main()
    {
        float one1 = .1f * 10;
        float one2 = 0f;
        for (int ctr = 1; ctr <= 10; ctr++)
            one2 += .1f;
    
        Console.WriteLine($"{one1:R} = {one2:R}: {one1.Equals(one2)}");
        Console.WriteLine($"{one1:R} is approximately equal to {one2:R}: " +
            $"{IsApproximatelyEqual(one1, one2, .000001f)}");
    
        float negativeOne1 = -1 * one1;
        float negativeOne2 = -1 * one2;
    
        Console.WriteLine($"{negativeOne1:R} = {negativeOne2:R}: {negativeOne1.Equals(negativeOne2)}");
        Console.WriteLine($"{negativeOne1:R} is approximately equal to {negativeOne2:R}: " +
            $"{IsApproximatelyEqual(negativeOne1, negativeOne2, .000001f)}");
    }
    
    static bool IsApproximatelyEqual(float value1, float value2, float epsilon)
    {
        // If they are equal anyway, just return True.
        if (value1.Equals(value2))
            return true;
    
        // Handle NaN, Infinity.
        if (Double.IsInfinity(value1) | Double.IsNaN(value1))
            return value1.Equals(value2);
        else if (Double.IsInfinity(value2) | Double.IsNaN(value2))
            return value1.Equals(value2);
    
        // Handle zero to avoid division by zero.
        double divisor = Math.Max(value1, value2);
        if (divisor.Equals(0))
            divisor = Math.Min(value1, value2);
    
        return Math.Abs((value1 - value2) / divisor) <= epsilon;
    }
    
    // The example displays the following output on .NET:
    //       1 = 1.0000001: False
    //       1 is approximately equal to 1.0000001: True
    //       -1 = -1.0000001: False
    //       -1 is approximately equal to -1.0000001: True
    
    open System
    
    let isApproximatelyEqual value1 value2 epsilon =
        // If they are equal anyway, just return True.
        if value1.Equals value2 then 
            true
        // Handle NaN, Infinity.
        elif Single.IsInfinity value1 || Single.IsNaN value1 then
            value1.Equals value2
        elif Single.IsInfinity value2 || Single.IsNaN value2 then
            value1.Equals value2
        else
            // Handle zero to avoid division by zero
            let divisor = max value1 value2
            let divisor = 
                if divisor.Equals 0 then
                    min value1 value2
                else divisor
            abs (value1 - value2) / divisor <= epsilon           
    
    
    let one1 = 0.1f * 10f
    let mutable one2 = 0f
    for _ = 1 to 10 do
       one2 <- one2 + 0.1f
    
    printfn $"{one1:R} = {one2:R}: {one1.Equals one2}"
    printfn $"{one1:R} is approximately equal to {one2:R}: {isApproximatelyEqual one1 one2 0.000001f}" 
    // The example displays the following output:
    //       1 = 1.00000012: False
    //       1 is approximately equal to 1.00000012: True
    
    Public Sub Main()
        Dim one1 As Single = 0.1 * 10
        Dim one2 As Single = 0
        For ctr As Integer = 1 To 10
            one2 += CSng(0.1)
        Next
        Console.WriteLine("{0:R} = {1:R}: {2}", one1, one2, one1.Equals(one2))
        Console.WriteLine("{0:R} is approximately equal to {1:R}: {2}",
                        one1, one2,
                        IsApproximatelyEqual(one1, one2, 0.000001))
    End Sub
    
    Function IsApproximatelyEqual(value1 As Single, value2 As Single,
                                 epsilon As Single) As Boolean
        ' If they are equal anyway, just return True.
        If value1.Equals(value2) Then Return True
    
        ' Handle NaN, Infinity.
        If Single.IsInfinity(value1) Or Single.IsNaN(value1) Then
            Return value1.Equals(value2)
        ElseIf Single.IsInfinity(value2) Or Single.IsNaN(value2) Then
            Return value1.Equals(value2)
        End If
    
        ' Handle zero to avoid division by zero.
        Dim divisor As Single = Math.Max(value1, value2)
        If divisor.Equals(0) Then
            divisor = Math.Min(value1, value2)
        End If
    
        Return Math.Abs(value1 - value2) / divisor <= epsilon
    End Function
    
    ' The example displays the following output:
    '       1 = 1.0000001: False
    '       1 is approximately equal to 1.0000001: True
    

Fließkommawerte und Ausnahmen

Vorgänge mit Gleitkommawerten lösen keine Ausnahmen aus, im Gegensatz zu Vorgängen mit integralen Typen, die Ausnahmen in Fällen illegaler Vorgänge wie Division durch Null oder Überlauf auslösen. Stattdessen ist in diesen Situationen das Ergebnis einer Fließkommaoperation Null, positiv unendlich, negativ unendlich oder keine Zahl (NaN):

  • Wenn das Ergebnis eines Gleitkommavorgangs für das Zielformat zu klein ist, ist das Ergebnis null. Dies kann auftreten, wenn zwei sehr kleine Gleitkommazahlen multipliziert werden, wie im folgenden Beispiel gezeigt.

    float value1 = 1.163287e-36f;
    float value2 = 9.164234e-25f;
    float result = value1 * value2;
    Console.WriteLine($"{value1} * {value2} = {result}");
    Console.WriteLine($"{result} = 0: {result.Equals(0.0f)}");
    
    // The example displays the following output:
    //       1.163287E-36 * 9.164234E-25 = 0
    //       0 = 0: True
    
    let value1 = 1.163287e-36f
    let value2 = 9.164234e-25f
    let result = value1 * value2
    printfn $"{value1} * {value2} = {result}"
    printfn $"{result} = 0: {result.Equals(0f)}"
    // The example displays the following output:
    //       1.163287E-36 * 9.164234E-25 = 0
    //       0 = 0: True
    
    Module Example7
        Public Sub Main()
            Dim value1 As Single = 1.163287E-36
            Dim value2 As Single = 9.164234E-25
            Dim result As Single = value1 * value2
            Console.WriteLine("{0} * {1} = {2:R}", value1, value2, result)
            Console.WriteLine("{0} = 0: {1}", result, result.Equals(0))
        End Sub
    End Module
    ' The example displays the following output:
    '       1.163287E-36 * 9.164234E-25 = 0
    '       0 = 0: True
    
  • Wenn die Größe des Ergebnisses eines Gleitkommavorgangs den Bereich des Zielformats überschreitet, ist PositiveInfinity das Ergebnis des Vorgangs oder NegativeInfinity, entsprechend dem Vorzeichen des Ergebnisses. Das Ergebnis eines Vorgangs, der überläuft Single.MaxValue, ist PositiveInfinity und das Ergebnis eines Vorgangs, der überläuft Single.MinValue, ist NegativeInfinity, wie das folgende Beispiel zeigt.

    float value1 = 3.065e35f;
    float value2 = 6.9375e32f;
    float result = value1 * value2;
    Console.WriteLine($"PositiveInfinity: {Single.IsPositiveInfinity(result)}");
    Console.WriteLine($"NegativeInfinity: {Single.IsNegativeInfinity(result)}");
    Console.WriteLine();
    
    value1 = -value1;
    result = value1 * value2;
    Console.WriteLine($"PositiveInfinity: {Single.IsPositiveInfinity(result)}");
    Console.WriteLine($"NegativeInfinity: {Single.IsNegativeInfinity(result)}");
    
    // The example displays the following output:
    //       PositiveInfinity: True
    //       NegativeInfinity: False
    //
    //       PositiveInfinity: False
    //       NegativeInfinity: True
    
    open System
    
    let value1 = 3.065e35f
    let value2 = 6.9375e32f
    let result = value1 * value2
    printfn $"PositiveInfinity: {Single.IsPositiveInfinity result}" 
    printfn $"NegativeInfinity: {Single.IsNegativeInfinity result}\n"
    
    let value3 = -value1
    let result2 = value3 * value2
    printfn $"PositiveInfinity: {Single.IsPositiveInfinity result}" 
    printfn $"NegativeInfinity: {Single.IsNegativeInfinity result}" 
    
    // The example displays the following output:
    //       PositiveInfinity: True
    //       NegativeInfinity: False
    //       
    //       PositiveInfinity: False
    //       NegativeInfinity: True
    
    Module Example8
        Public Sub Main()
            Dim value1 As Single = 3.065E+35
            Dim value2 As Single = 6.9375E+32
            Dim result As Single = value1 * value2
            Console.WriteLine("PositiveInfinity: {0}",
                             Single.IsPositiveInfinity(result))
            Console.WriteLine("NegativeInfinity: {0}",
                            Single.IsNegativeInfinity(result))
            Console.WriteLine()
            value1 = -value1
            result = value1 * value2
            Console.WriteLine("PositiveInfinity: {0}",
                             Single.IsPositiveInfinity(result))
            Console.WriteLine("NegativeInfinity: {0}",
                            Single.IsNegativeInfinity(result))
        End Sub
    End Module
    ' The example displays the following output:
    '       PositiveInfinity: True
    '       NegativeInfinity: False
    '       
    '       PositiveInfinity: False
    '       NegativeInfinity: True
    

    PositiveInfinity ergibt sich auch aus einer Division um Null mit einer positiven Dividende und NegativeInfinity ergibt sich aus einer Division um Null mit einer negativen Dividende.

  • Wenn ein Gleitkommavorgang ungültig ist, ist das Ergebnis des Vorgangs NaN. Beispiel: NaN-Ergebnisse aus den folgenden Vorgängen:

    • Abteilung durch Null mit einem Dividenden Null. Beachten Sie, dass andere Fälle der Division durch Null entweder PositiveInfinity oder NegativeInfinity als Ergebnis ausgeben.
    • Jede Fließkomma-Operation mit ungültiger Eingabe. Beispielsweise liefert der Versuch, die Quadratwurzel eines negativen Werts zu finden, NaN.
    • Jeder Vorgang mit einem Argument, dessen Wert lautet Single.NaN.

Typkonvertierungen

Die Single Struktur definiert keine expliziten oder impliziten Konvertierungsoperatoren. Stattdessen werden Konvertierungen vom Compiler implementiert.

In der folgenden Tabelle sind die möglichen Konvertierungen eines Werts der anderen primitiven numerischen Typen in einen Single Wert aufgeführt. Außerdem wird angegeben, ob die Konvertierung verbreitert oder verengt ist und ob die resultierende Single möglicherweise weniger genau ist als der ursprüngliche Wert.

Konvertierung von Vergrößern/Verkleinern Möglicher Genauigkeitsverlust
Byte Erweiterung No
Decimal Erweiterung

Beachten Sie, dass C# einen Umwandlungsoperator erfordert.
Yes. Decimal unterstützt 29 Dezimalstellen Präzision; Single unterstützt 9.
Double Einschränkung; Werte außerhalb des zulässigen Bereichs werden in Double.NegativeInfinity oder Double.PositiveInfinity konvertiert. Yes. Double unterstützt 17 Dezimalstellen an Genauigkeit; Single unterstützt 9.
Int16 Erweiterung No
Int32 Erweiterung Yes. Int32 unterstützt 10 Dezimalstellen Genauigkeit; Single unterstützt 9.
Int64 Erweiterung Yes. Int64 unterstützt 19 Dezimalstellen Genauigkeit; Single unterstützt 9.
SByte Erweiterung No
UInt16 Erweiterung No
UInt32 Erweiterung Yes. UInt32 unterstützt 10 Dezimalstellen Genauigkeit; Single unterstützt 9.
UInt64 Erweiterung Yes. Int64 unterstützt 20 Dezimalstellen Genauigkeit; Single unterstützt 9.

Im folgenden Beispiel wird der Minimal- oder Maximalwert anderer numerischer Grundtypen in einen Single Wert konvertiert.

using System;

public class Example4
{
    public static void Main()
    {
        dynamic[] values = { Byte.MinValue, Byte.MaxValue, Decimal.MinValue,
                           Decimal.MaxValue, Double.MinValue, Double.MaxValue,
                           Int16.MinValue, Int16.MaxValue, Int32.MinValue,
                           Int32.MaxValue, Int64.MinValue, Int64.MaxValue,
                           SByte.MinValue, SByte.MaxValue, UInt16.MinValue,
                           UInt16.MaxValue, UInt32.MinValue, UInt32.MaxValue,
                           UInt64.MinValue, UInt64.MaxValue };
        float sngValue;
        foreach (var value in values)
        {
            if (value.GetType() == typeof(Decimal) ||
                value.GetType() == typeof(Double))
                sngValue = (float)value;
            else
                sngValue = value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {sngValue:R} ({sngValue.GetType().Name})");
        }
    }
}
// The example displays the following output:
//       0 (Byte) --> 0 (Single)
//       255 (Byte) --> 255 (Single)
//       -79228162514264337593543950335 (Decimal) --> -7.92281625E+28 (Single)
//       79228162514264337593543950335 (Decimal) --> 7.92281625E+28 (Single)
//       -1.79769313486232E+308 (Double) --> -Infinity (Single)
//       1.79769313486232E+308 (Double) --> Infinity (Single)
//       -32768 (Int16) --> -32768 (Single)
//       32767 (Int16) --> 32767 (Single)
//       -2147483648 (Int32) --> -2.14748365E+09 (Single)
//       2147483647 (Int32) --> 2.14748365E+09 (Single)
//       -9223372036854775808 (Int64) --> -9.223372E+18 (Single)
//       9223372036854775807 (Int64) --> 9.223372E+18 (Single)
//       -128 (SByte) --> -128 (Single)
//       127 (SByte) --> 127 (Single)
//       0 (UInt16) --> 0 (Single)
//       65535 (UInt16) --> 65535 (Single)
//       0 (UInt32) --> 0 (Single)
//       4294967295 (UInt32) --> 4.2949673E+09 (Single)
//       0 (UInt64) --> 0 (Single)
//       18446744073709551615 (UInt64) --> 1.84467441E+19 (Single)
open System

let values: obj list = 
    [ Byte.MinValue; Byte.MaxValue; Decimal.MinValue
      Decimal.MaxValue; Double.MinValue; Double.MaxValue
      Int16.MinValue; Int16.MaxValue; Int32.MinValue
      Int32.MaxValue; Int64.MinValue; Int64.MaxValue
      SByte.MinValue; SByte.MaxValue; UInt16.MinValue
      UInt16.MaxValue; UInt32.MinValue; UInt32.MaxValue
      UInt64.MinValue; UInt64.MaxValue ]

for value in values do
    let sngValue = 
        match value with
        | :? byte as v -> float32 v
        | :? decimal as v -> float32 v
        | :? double as v -> float32 v
        | :? int16 as v -> float32 v
        | :? int as v -> float32 v
        | :? int64 as v -> float32 v
        | :? int8 as v -> float32 v
        | :? uint16 as v -> float32 v
        | :? uint as v -> float32 v
        | :? uint64 as v -> float32 v
        | _ -> raise (NotImplementedException "Unknown Type")
    printfn $"{value} ({value.GetType().Name}) --> {sngValue:R} ({sngValue.GetType().Name})"
// The example displays the following output:
//       0 (Byte) --> 0 (Single)
//       255 (Byte) --> 255 (Single)
//       -79228162514264337593543950335 (Decimal) --> -7.92281625E+28 (Single)
//       79228162514264337593543950335 (Decimal) --> 7.92281625E+28 (Single)
//       -1.79769313486232E+308 (Double) --> -Infinity (Single)
//       1.79769313486232E+308 (Double) --> Infinity (Single)
//       -32768 (Int16) --> -32768 (Single)
//       32767 (Int16) --> 32767 (Single)
//       -2147483648 (Int32) --> -2.14748365E+09 (Single)
//       2147483647 (Int32) --> 2.14748365E+09 (Single)
//       -9223372036854775808 (Int64) --> -9.223372E+18 (Single)
//       9223372036854775807 (Int64) --> 9.223372E+18 (Single)
//       -128 (SByte) --> -128 (Single)
//       127 (SByte) --> 127 (Single)
//       0 (UInt16) --> 0 (Single)
//       65535 (UInt16) --> 65535 (Single)
//       0 (UInt32) --> 0 (Single)
//       4294967295 (UInt32) --> 4.2949673E+09 (Single)
//       0 (UInt64) --> 0 (Single)
//       18446744073709551615 (UInt64) --> 1.84467441E+19 (Single)
Module Example5
    Public Sub Main()
        Dim values() As Object = {Byte.MinValue, Byte.MaxValue, Decimal.MinValue,
                                 Decimal.MaxValue, Double.MinValue, Double.MaxValue,
                                 Int16.MinValue, Int16.MaxValue, Int32.MinValue,
                                 Int32.MaxValue, Int64.MinValue, Int64.MaxValue,
                                 SByte.MinValue, SByte.MaxValue, UInt16.MinValue,
                                 UInt16.MaxValue, UInt32.MinValue, UInt32.MaxValue,
                                 UInt64.MinValue, UInt64.MaxValue}
        Dim sngValue As Single
        For Each value In values
            If value.GetType() = GetType(Double) Then
                sngValue = CSng(value)
            Else
                sngValue = value
            End If
            Console.WriteLine("{0} ({1}) --> {2:R} ({3})",
                           value, value.GetType().Name,
                           sngValue, sngValue.GetType().Name)
        Next
    End Sub
End Module
' The example displays the following output:
'       0 (Byte) --> 0 (Single)
'       255 (Byte) --> 255 (Single)
'       -79228162514264337593543950335 (Decimal) --> -7.92281625E+28 (Single)
'       79228162514264337593543950335 (Decimal) --> 7.92281625E+28 (Single)
'       -1.79769313486232E+308 (Double) --> -Infinity (Single)
'       1.79769313486232E+308 (Double) --> Infinity (Single)
'       -32768 (Int16) --> -32768 (Single)
'       32767 (Int16) --> 32767 (Single)
'       -2147483648 (Int32) --> -2.14748365E+09 (Single)
'       2147483647 (Int32) --> 2.14748365E+09 (Single)
'       -9223372036854775808 (Int64) --> -9.223372E+18 (Single)
'       9223372036854775807 (Int64) --> 9.223372E+18 (Single)
'       -128 (SByte) --> -128 (Single)
'       127 (SByte) --> 127 (Single)
'       0 (UInt16) --> 0 (Single)
'       65535 (UInt16) --> 65535 (Single)
'       0 (UInt32) --> 0 (Single)
'       4294967295 (UInt32) --> 4.2949673E+09 (Single)
'       0 (UInt64) --> 0 (Single)
'       18446744073709551615 (UInt64) --> 1.84467441E+19 (Single)

Darüber hinaus werden die Double Werte Double.NaN, Double.PositiveInfinity, und Double.NegativeInfinity konvertiert in Single.NaN, Single.PositiveInfinity, bzw Single.NegativeInfinity. . .

Beachten Sie, dass die Konvertierung des Werts einiger numerischer Typen in einen Single Wert zu einem Genauigkeitsverlust führen kann. Wie das Beispiel zeigt, ist ein Genauigkeitsverlust beim Konvertieren von Decimal, Double, Int32, Int64, UInt32 und UInt64 Werten zu Single Werten möglich.

Bei der Konvertierung eines Single Werts in ein Double Wert handelt es sich um eine Erweiterungskonvertierung. Die Konvertierung kann zu einem Genauigkeitsverlust führen, wenn der Double Typ keine genaue Darstellung für den Single Wert aufweist.

Die Konvertierung eines Single Werts in einen Wert eines anderen primitiven numerischen Datentyps als einer Double ist eine schmale Konvertierung und erfordert einen Umwandlungsoperator (in C#) oder eine Konvertierungsmethode (in Visual Basic). Werte, die sich außerhalb des Bereichs des Zieldatentyps befinden, die durch die Eigenschaften MinValue und MaxValue des Zieltyps definiert werden, verhalten sich wie in der folgenden Tabelle dargestellt.

Zieltyp Result
Beliebiger integraler Typ Eine OverflowException Ausnahme, wenn die Konvertierung in einem überprüften Kontext auftritt.

Wenn die Konvertierung in einem ungeprüften Kontext erfolgt (die Vorgabe in C#), ist die Konvertierung erfolgreich, aber der Wert läuft über.
Decimal Eine OverflowException Ausnahme.

Darüber hinaus lösen Single.NaN, Single.PositiveInfinity und Single.NegativeInfinity bei Konversionen in Ganzzahlen in einem geprüften Kontext ein OverflowException aus, aber diese Werte laufen bei der Konversion in Ganzzahlen in einem ungeprüften Kontext über. Bei Konvertierungen nach Decimalwerfen sie immer ein OverflowException. Für Konvertierungen zu Double werden sie in Double.NaN, Double.PositiveInfinity und Double.NegativeInfinity konvertiert, jeweils entsprechend.

Beachten Sie, dass ein Genauigkeitsverlust dazu führen kann, dass ein Single Wert in einen anderen numerischen Typ konvertiert wird. Bei der Konvertierung nicht integraler Single Werte, wie die Ausgabe aus dem Beispiel zeigt, geht die Bruchkomponente verloren, wenn der Single Wert entweder gerundet wird (wie in Visual Basic) oder abgeschnitten wird (wie in C# und F#). Bei Konvertierungen in Decimal Werte hat der Single Wert möglicherweise keine genaue Darstellung im Zieldatentyp.

Im folgenden Beispiel wird eine Anzahl von Single Werten in mehrere andere numerische Typen konvertiert. Die Konvertierungen erfolgen in einem überprüften Kontext in Visual Basic (der Voreinstellung), in C# (aufgrund des Schlüsselworts 'checked') und in F# (aufgrund der open Checked Anweisung). Die Ausgabe aus dem Beispiel zeigt das Ergebnis für Konvertierungen sowohl in einem überprüften als auch in einem deaktivierten Kontext. Sie können Konvertierungen in einem unchecked-Kontext in Visual Basic ausführen, indem Sie mit der /removeintchecks+-Compileroption kompilieren, in C# indem Sie die checked-Anweisung auskommentieren und in F#, indem Sie die open Checked-Anweisung auskommentieren.

float[] values = { Single.MinValue, -67890.1234f, -12345.6789f,
                 12345.6789f, 67890.1234f, Single.MaxValue,
                 Single.NaN, Single.PositiveInfinity,
                 Single.NegativeInfinity };
checked
{
    foreach (var value in values)
    {
        try
        {
            Int64 lValue = (long)value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {lValue} (0x{lValue:X16}) ({lValue.GetType().Name})");
        }
        catch (OverflowException)
        {
            Console.WriteLine($"Unable to convert {value} to Int64.");
        }
        try
        {
            UInt64 ulValue = (ulong)value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {ulValue} (0x{ulValue:X16}) ({ulValue.GetType().Name})");
        }
        catch (OverflowException)
        {
            Console.WriteLine($"Unable to convert {value} to UInt64.");
        }
        try
        {
            Decimal dValue = (decimal)value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {dValue} ({dValue.GetType().Name})");
        }
        catch (OverflowException)
        {
            Console.WriteLine($"Unable to convert {value} to Decimal.");
        }

        Double dblValue = value;
        Console.WriteLine($"{value} ({value.GetType().Name}) --> {dblValue} ({dblValue.GetType().Name})");
        Console.WriteLine();
    }
}

// The example displays the following output for conversions performed
// in a checked context:
//       Unable to convert -3.402823E+38 to Int64.
//       Unable to convert -3.402823E+38 to UInt64.
//       Unable to convert -3.402823E+38 to Decimal.
//       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
//
//       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
//       Unable to convert -67890.13 to UInt64.
//       -67890.13 (Single) --> -67890.12 (Decimal)
//       -67890.13 (Single) --> -67890.125 (Double)
//
//       -12345.68 (Single) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
//       Unable to convert -12345.68 to UInt64.
//       -12345.68 (Single) --> -12345.68 (Decimal)
//       -12345.68 (Single) --> -12345.6787109375 (Double)
//
//       12345.68 (Single) --> 12345 (0x0000000000003039) (Int64)
//       12345.68 (Single) --> 12345 (0x0000000000003039) (UInt64)
//       12345.68 (Single) --> 12345.68 (Decimal)
//       12345.68 (Single) --> 12345.6787109375 (Double)
//
//       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
//       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
//       67890.13 (Single) --> 67890.12 (Decimal)
//       67890.13 (Single) --> 67890.125 (Double)
//
//       Unable to convert 3.402823E+38 to Int64.
//       Unable to convert 3.402823E+38 to UInt64.
//       Unable to convert 3.402823E+38 to Decimal.
//       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
//
//       Unable to convert NaN to Int64.
//       Unable to convert NaN to UInt64.
//       Unable to convert NaN to Decimal.
//       NaN (Single) --> NaN (Double)
//
//       Unable to convert ∞ to Int64.
//       Unable to convert ∞ to UInt64.
//       Unable to convert ∞ to Decimal.
//       ∞ (Single) --> ∞ (Double)
//
//       Unable to convert -∞ to Int64.
//       Unable to convert -∞ to UInt64.
//       Unable to convert -∞ to Decimal.
//       -∞ (Single) --> -∞ (Double)
open System
open Checked

let values = 
    [ Single.MinValue; -67890.1234f; -12345.6789f
      12345.6789f; 67890.1234f; Single.MaxValue
      Single.NaN; Single.PositiveInfinity
      Single.NegativeInfinity ]

for value in values do
    try
        let lValue = int64 value
        printfn $"{value} ({value.GetType().Name}) --> {lValue} (0x{lValue:X16}) ({lValue.GetType().Name})"
    with :? OverflowException ->
        printfn $"Unable to convert {value} to Int64."
    try
        let ulValue = uint64 value
        printfn $"{value} ({value.GetType().Name}) --> {ulValue} (0x{ulValue:X16}) ({ulValue.GetType().Name})"
    with :? OverflowException ->
        printfn $"Unable to convert {value} to UInt64."
    try
        let dValue = decimal value
        printfn $"{value} ({value.GetType().Name}) --> {dValue} ({dValue.GetType().Name})"
    with :? OverflowException ->
        printfn $"Unable to convert {value} to Decimal."

    let dblValue = double value
    printfn $"{value} ({value.GetType().Name}) --> {dblValue} ({dblValue.GetType().Name})\n"
// The example displays the following output for conversions performed
// in a checked context:
//       Unable to convert -3.402823E+38 to Int64.
//       Unable to convert -3.402823E+38 to UInt64.
//       Unable to convert -3.402823E+38 to Decimal.
//       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
//
//       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
//       Unable to convert -67890.13 to UInt64.
//       -67890.13 (Single) --> -67890.12 (Decimal)
//       -67890.13 (Single) --> -67890.125 (Double)
//
//       -12345.68 (Single) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
//       Unable to convert -12345.68 to UInt64.
//       -12345.68 (Single) --> -12345.68 (Decimal)
//       -12345.68 (Single) --> -12345.6787109375 (Double)
//
//       12345.68 (Single) --> 12345 (0x0000000000003039) (Int64)
//       12345.68 (Single) --> 12345 (0x0000000000003039) (UInt64)
//       12345.68 (Single) --> 12345.68 (Decimal)
//       12345.68 (Single) --> 12345.6787109375 (Double)
//
//       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
//       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
//       67890.13 (Single) --> 67890.12 (Decimal)
//       67890.13 (Single) --> 67890.125 (Double)
//
//       Unable to convert 3.402823E+38 to Int64.
//       Unable to convert 3.402823E+38 to UInt64.
//       Unable to convert 3.402823E+38 to Decimal.
//       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
//
//       Unable to convert NaN to Int64.
//       Unable to convert NaN to UInt64.
//       Unable to convert NaN to Decimal.
//       NaN (Single) --> NaN (Double)
//
//       Unable to convert Infinity to Int64.
//       Unable to convert Infinity to UInt64.
//       Unable to convert Infinity to Decimal.
//       Infinity (Single) --> Infinity (Double)
//
//       Unable to convert -Infinity to Int64.
//       Unable to convert -Infinity to UInt64.
//       Unable to convert -Infinity to Decimal.
//       -Infinity (Single) --> -Infinity (Double)
// The example displays the following output for conversions performed
// in an unchecked context:
//       -3.402823E+38 (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       -3.402823E+38 (Single) --> 9223372036854775808 (0x8000000000000000) (UInt64)
//       Unable to convert -3.402823E+38 to Decimal.
//       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
//
//       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
//       -67890.13 (Single) --> 18446744073709483726 (0xFFFFFFFFFFFEF6CE) (UInt64)
//       -67890.13 (Single) --> -67890.12 (Decimal)
//       -67890.13 (Single) --> -67890.125 (Double)
//
//       -12345.68 (Single) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
//       -12345.68 (Single) --> 18446744073709539271 (0xFFFFFFFFFFFFCFC7) (UInt64)
//       -12345.68 (Single) --> -12345.68 (Decimal)
//       -12345.68 (Single) --> -12345.6787109375 (Double)
//
//       12345.68 (Single) --> 12345 (0x0000000000003039) (Int64)
//       12345.68 (Single) --> 12345 (0x0000000000003039) (UInt64)
//       12345.68 (Single) --> 12345.68 (Decimal)
//       12345.68 (Single) --> 12345.6787109375 (Double)
//
//       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
//       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
//       67890.13 (Single) --> 67890.12 (Decimal)
//       67890.13 (Single) --> 67890.125 (Double)
//
//       3.402823E+38 (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       3.402823E+38 (Single) --> 0 (0x0000000000000000) (UInt64)
//       Unable to convert 3.402823E+38 to Decimal.
//       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
//
//       NaN (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       NaN (Single) --> 0 (0x0000000000000000) (UInt64)
//       Unable to convert NaN to Decimal.
//       NaN (Single) --> NaN (Double)
//
//       Infinity (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       Infinity (Single) --> 0 (0x0000000000000000) (UInt64)
//       Unable to convert Infinity to Decimal.
//       Infinity (Single) --> Infinity (Double)
//
//       -Infinity (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       -Infinity (Single) --> 9223372036854775808 (0x8000000000000000) (UInt64)
//       Unable to convert -Infinity to Decimal.
//       -Infinity (Single) --> -Infinity (Double)
Module Example6
    Public Sub Main()
        Dim values() As Single = {Single.MinValue, -67890.1234, -12345.6789,
                                 12345.6789, 67890.1234, Single.MaxValue,
                                 Single.NaN, Single.PositiveInfinity,
                                 Single.NegativeInfinity}
        For Each value In values
            Try
                Dim lValue As Long = CLng(value)
                Console.WriteLine("{0} ({1}) --> {2} (0x{2:X16}) ({3})",
                               value, value.GetType().Name,
                               lValue, lValue.GetType().Name)
            Catch e As OverflowException
                Console.WriteLine("Unable to convert {0} to Int64.", value)
            End Try
            Try
                Dim ulValue As UInt64 = CULng(value)
                Console.WriteLine("{0} ({1}) --> {2} (0x{2:X16}) ({3})",
                               value, value.GetType().Name,
                               ulValue, ulValue.GetType().Name)
            Catch e As OverflowException
                Console.WriteLine("Unable to convert {0} to UInt64.", value)
            End Try
            Try
                Dim dValue As Decimal = CDec(value)
                Console.WriteLine("{0} ({1}) --> {2} ({3})",
                               value, value.GetType().Name,
                               dValue, dValue.GetType().Name)
            Catch e As OverflowException
                Console.WriteLine("Unable to convert {0} to Decimal.", value)
            End Try

            Dim dblValue As Double = value
            Console.WriteLine("{0} ({1}) --> {2} ({3})",
                           value, value.GetType().Name,
                           dblValue, dblValue.GetType().Name)
            Console.WriteLine()
        Next
    End Sub
End Module

' The example displays the following output for conversions performed
' in a checked context:
'       Unable to convert -3.402823E+38 to Int64.
'       Unable to convert -3.402823E+38 to UInt64.
'       Unable to convert -3.402823E+38 to Decimal.
'       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
'
'       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
'       Unable to convert -67890.13 to UInt64.
'       -67890.13 (Single) --> -67890.12 (Decimal)
'       -67890.13 (Single) --> -67890.125 (Double)
'
'       -12345.68 (Single) --> -12346 (0xFFFFFFFFFFFFCFC6) (Int64)
'       Unable to convert -12345.68 to UInt64.
'       -12345.68 (Single) --> -12345.68 (Decimal)
'       -12345.68 (Single) --> -12345.6787109375 (Double)
'
'       12345.68 (Single) --> 12346 (0x000000000000303A) (Int64)
'       12345.68 (Single) --> 12346 (0x000000000000303A) (UInt64)
'       12345.68 (Single) --> 12345.68 (Decimal)
'       12345.68 (Single) --> 12345.6787109375 (Double)
'
'       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
'       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
'       67890.13 (Single) --> 67890.12 (Decimal)
'       67890.13 (Single) --> 67890.125 (Double)
'
'       Unable to convert 3.402823E+38 to Int64.
'       Unable to convert 3.402823E+38 to UInt64.
'       Unable to convert 3.402823E+38 to Decimal.
'       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
'
'       Unable to convert NaN to Int64.
'       Unable to convert NaN to UInt64.
'       Unable to convert NaN to Decimal.
'       NaN (Single) --> NaN (Double)
'
'       Unable to convert ∞ to Int64.
'       Unable to convert ∞ to UInt64.
'       Unable to convert ∞ to Decimal.
'       ∞ (Single) --> ∞ (Double)
'
'       Unable to convert -∞ to Int64.
'       Unable to convert -∞ to UInt64.
'       Unable to convert -∞ to Decimal.
'       -∞ (Single) --> -∞ (Double)

Weitere Informationen zur Konvertierung numerischer Typen finden Sie unter Typkonvertierung in .NET und Typkonvertierungstabellen.

Fließkomma-Funktionalität

Die Single Struktur und verwandte Typen stellen Methoden bereit, um die folgenden Kategorien von Vorgängen auszuführen:

  • Vergleich von Werten. Sie können die Equals Methode aufrufen, um zu bestimmen, ob zwei Single Werte gleich sind, oder die CompareTo Methode, um die Beziehung zwischen zwei Werten zu bestimmen.

    Die Single Struktur unterstützt auch einen vollständigen Satz von Vergleichsoperatoren. Sie können z. B. auf Gleichheit oder Ungleichheit testen oder ermitteln, ob ein Wert größer oder gleich einem anderen Wert ist. Wenn einer der Operanden ein Doubleist, wird der Single Wert vor dem Ausführen des Vergleichs in einen Double konvertiert. Wenn einer der Operanden ein integraler Typ ist, wird er in einen Single konvertiert, bevor der Vergleich ausgeführt wird. Obwohl es sich hierbei um immer größere Umwandlungen handelt, kann es zu einem Verlust an Genauigkeit kommen.

    Warning

    Aufgrund von Genauigkeitsunterschieden können zwei Single Werte, von denen Sie erwarten, dass sie gleich sind, ungleich sein, was sich auf das Ergebnis des Vergleichs auswirkt. Weitere Informationen zum Vergleichen von zwei Werten finden Sie im Abschnitt "Single".

    Sie können auch die IsNaN, IsInfinity, IsPositiveInfinity und IsNegativeInfinity-Methoden aufrufen, um auf diese speziellen Werte zu testen.

  • Mathematische Vorgänge. Allgemeine arithmetische Vorgänge wie Addition, Subtraktion, Multiplikation und Division werden von Sprachcompilern und CIL-Anweisungen (Common Intermediate Language) anstelle von Single Methoden implementiert. Wenn der andere Operand in einem mathematischen Vorgang ein Doubleist, wird er Single vor dem Ausführen des Vorgangs in einen Double konvertiert, und das Ergebnis des Vorgangs ist ebenfalls ein Double Wert. Wenn der andere Operand ein integraler Typ ist, wird er vor dem Ausführen des Vorgangs in einen Single konvertiert, und das Ergebnis des Vorgangs ist ebenfalls ein Single Wert.

    Sie können andere mathematische Vorgänge ausführen, indem Sie static-Methoden (in Visual Basic Shared) in der System.Math-Klasse aufrufen. Dazu gehören zusätzliche Methoden, die häufig für Arithmetik (z. B. Math.Abs, Math.Sign und Math.Sqrt), Geometrie (z. B. Math.Cos und Math.Sin), und Analysis (z. B. Math.Log) verwendet werden. In allen Fällen wird der Single Wert in einen Double umgewandelt.

    Sie können auch die einzelnen Bits in einem Single Wert bearbeiten. Die BitConverter.GetBytes(Single) Methode gibt das Bitmuster in einem Bytearray zurück. Indem Sie dieses Bytearray an die BitConverter.ToInt32 Methode übergeben, können Sie auch das Single Bitmuster des Werts in einer 32-Bit-Ganzzahl beibehalten.

  • Runden. Rundung wird häufig als Technik verwendet, um die Auswirkungen von Unterschieden zwischen Werten zu verringern, die durch Probleme der Gleitkommadarstellung und Genauigkeit verursacht werden. Sie können einen Single Wert runden, indem Sie die Math.Round Methode aufrufen. Beachten Sie jedoch, dass der Single Wert vor dem Aufrufen der Methode in eine Double konvertiert wird, und die Konvertierung kann zu einem Genauigkeitsverlust führen.

  • Formatierung. Sie können einen Single Wert in eine Zeichenfolge konvertieren, indem Sie die ToString Methode aufrufen oder die Verbundformatierung verwenden. Informationen dazu, wie Zeichenfolgen die Zeichenfolgendarstellung von Gleitkommawerten steuern, finden Sie unter Standard Numeric Format Strings and Custom Numeric Format Strings.

  • Analysieren von Zeichenfolgen. Sie können die Zeichenfolgendarstellung eines Gleitkommawerts in einen Single-Wert konvertieren, indem Sie die Methode Parse oder TryParse aufrufen. Wenn der Analysevorgang fehlschlägt, löst die Parse Methode eine Ausnahme aus, während die TryParse Methode zurückgibt false.

  • Typumwandlung. Die Single Struktur stellt eine explizite Schnittstellenimplementierung für die IConvertible Schnittstelle bereit, die die Konvertierung zwischen zwei standardmäßigen .NET-Datentypen unterstützt. Sprachcompiler unterstützen auch die implizite Konvertierung von Werten für alle anderen standardmäßigen numerischen Typen, mit Ausnahme der Konvertierung von Double- in Single-Werte. Die Umwandlung eines Werts eines numerischen Standardtyps, außer Double, in eine Single ist eine Erweiterungskonvertierung und erfordert nicht die Verwendung eines Umwandlungsoperators oder einer Methode zur Konvertierung.

    Die Konvertierung von 32-Bit- und 64-Bit-Ganzzahlwerten kann jedoch zu einem Genauigkeitsverlust führen. In der folgenden Tabelle sind die Unterschiede der Genauigkeit für 32-Bit-, 64-Bit- und Double Typen aufgeführt:

    Typ Maximale Genauigkeit (Dezimalziffern) Interne Genauigkeit (Dezimalziffern)
    Double 15 17
    Int32 und UInt32 10 10
    Int64 und UInt64 19 19
    Single 7 9

    Das Problem der Genauigkeit betrifft am häufigsten Single-Werte, die in Double-Werte konvertiert werden. Im folgenden Beispiel sind zwei Werte, die von identischen Divisionsvorgängen erzeugt werden, ungleich, da einer der Werte ein Gleitkommawert mit einfacher Genauigkeit ist, der in einen Double konvertiert wird.

    Double value1 = 1 / 3.0;
    Single sValue2 = 1 / 3.0f;
    Double value2 = (Double)sValue2;
    Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
    
    // The example displays the following output on .NET:
    //        0.3333333333333333 = 0.3333333432674408: False
    
    let value1 = 1. / 3.
    let sValue2 = 1f / 3f
    let value2 = double sValue2
    printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
    // The example displays the following output:
    //        0.33333333333333331 = 0.3333333432674408: False
    
    Dim value1 As Double = 1 / 3
    Dim sValue2 As Single = 1 / 3
    Dim value2 As Double = CDbl(sValue2)
    Console.WriteLine("{0} = {1}: {2}", value1, value2, value1.Equals(value2))
    
    ' The example displays the following output:
    '       0.3333333333333333 = 0.3333333432674408: False
    

Felder

Name Beschreibung
E

Stellt die natürliche logarithmische Basis dar, die durch die Konstante e angegeben wird.

Epsilon

Stellt den kleinsten positiven Single Wert dar, der größer als Null ist. Dieses Feld ist konstant.

MaxValue

Stellt den größten möglichen Wert von Single. Dieses Feld ist konstant.

MinValue

Stellt den kleinsten möglichen Wert von Single. Dieses Feld ist konstant.

NaN

Stellt keine Zahl (NaN) dar. Dieses Feld ist konstant.

NegativeInfinity

Stellt negative Unendlichkeit dar. Dieses Feld ist konstant.

NegativeZero

Stellt die Zahl negative Null (-0) dar.

Pi

Stellt das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser dar, der durch die Konstante angegeben wird, π.

PositiveInfinity

Stellt positive Unendlichkeit dar. Dieses Feld ist konstant.

Tau

Stellt die Anzahl der Bogenmaße in einer Drehzahl dar, die durch die Konstante τ angegeben wird.

Methoden

Name Beschreibung
Abs(Single)

Berechnet den absoluten Wert.

Acos(Single)

Berechnet den Arkuskosinus eines Werts.

Acosh(Single)

Berechnet den hyperbolischen Arkuskosinus eines Werts.

AcosPi(Single)

Berechnet den Arkuskosinus eines Werts und dividiert das Ergebnis durch pi.

Asin(Single)

Berechnet den Arkussinus eines Werts.

Asinh(Single)

Berechnet den hyperbolischen Arkussinus eines Werts.

AsinPi(Single)

Berechnet den Arkussinus eines Werts und dividiert das Ergebnis durch pi.

Atan(Single)

Berechnet den Bogen-Tangens eines Werts.

Atan2(Single, Single)

Berechnet den Bogen-Tangens des Quotienten zweier Werte.

Atan2Pi(Single, Single)

Berechnet den Bogen-Tangens für den Quotienten zweier Werte und dividiert das Ergebnis durch pi.

Atanh(Single)

Berechnet den hyperbolischen Bogen-Tangens eines Werts.

AtanPi(Single)

Berechnet den Bogen-Tangens eines Werts und dividiert das Ergebnis durch pi.

BitDecrement(Single)

Gibt den größten Wert zurück, der kleiner als ein angegebener Wert ist.

BitIncrement(Single)

Gibt den kleinsten Wert zurück, der größer als ein angegebener Wert ist.

Cbrt(Single)

Berechnet den Cubestamm eines Werts.

Ceiling(Single)

Berechnet die Obergrenze eines Werts.

Clamp(Single, Single, Single)

Klammert einen Wert auf einen inklusiven Minimal- und Maximalwert.

ClampNative(Single, Single, Single)

Klammert einen Wert auf einen inklusiven Minimal- und Maximalwert unter Verwendung plattformspezifischer Verhaltensweisen für NaN und NegativeZero.

CompareTo(Object)

Vergleicht diese Instanz mit einem angegebenen Objekt und gibt eine ganze Zahl zurück, die angibt, ob der Wert dieser Instanz kleiner als, gleich oder größer als der Wert des angegebenen Objekts ist.

CompareTo(Single)

Vergleicht diese Instanz mit einer angegebenen Gleitkommazahl mit einfacher Genauigkeit und gibt eine ganze Zahl zurück, die angibt, ob der Wert dieser Instanz kleiner als, gleich oder größer als der Wert der angegebenen Gleitkommazahl mit einfacher Genauigkeit ist.

ConvertToInteger<TInteger>(Single)

Konvertiert einen Wert in einen angegebenen ganzzahligen Typ unter Verwendung der Sättigung beim Überlauf.

ConvertToIntegerNative<TInteger>(Single)

Wandelt einen Wert in einen angegebenen ganzzahligen Typ um, wobei das plattformspezifische Verhalten beim Überlauf verwendet wird.

CopySign(Single, Single)

Kopiert das Vorzeichen eines Werts in das Vorzeichen eines anderen Werts.

Cos(Single)

Berechnet den Kosinus eines Werts.

Cosh(Single)

Berechnet den hyperbolischen Kosinus eines Werts.

CosPi(Single)

Berechnet den Kosinus eines Werts, der von pi.

CreateChecked<TOther>(TOther)

Erstellt eine Instanz des aktuellen Typs aus einem Wert und löst eine Überlaufausnahme für alle Werte aus, die außerhalb des darstellbaren Bereichs des aktuellen Typs liegen.

CreateSaturating<TOther>(TOther)

Erstellt eine Instanz des aktuellen Typs aus einem Wert, wobei alle Werte gesättigt werden, die außerhalb des darstellbaren Bereichs des aktuellen Typs liegen.

CreateTruncating<TOther>(TOther)

Erstellt eine Instanz des aktuellen Typs aus einem Wert, wobei alle Werte abgeschnitten werden, die außerhalb des darstellbaren Bereichs des aktuellen Typs liegen.

DegreesToRadians(Single)

Wandelt einen bestimmten Wert von Grad in Bogenmaß um.

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht.

Equals(Single)

Gibt einen Wert zurück, der angibt, ob diese Instanz und ein angegebenes Single Objekt denselben Wert darstellen.

Exp(Single)

E Berechnet, die auf eine bestimmte Leistung ausgelöst wird.

Exp10(Single)

10 Berechnet, die auf eine bestimmte Leistung ausgelöst wird.

Exp10M1(Single)

10 Berechnet eine bestimmte Potenz und subtrahiert eins.

Exp2(Single)

2 Berechnet, die auf eine bestimmte Leistung ausgelöst wird.

Exp2M1(Single)

2 Berechnet eine bestimmte Potenz und subtrahiert eins.

ExpM1(Single)

E Berechnet eine bestimmte Potenz und subtrahiert eins.

Floor(Single)

Berechnet den Boden eines Werts.

FusedMultiplyAdd(Single, Single, Single)

Berechnet das fused multiplizierte Add von drei Werten.

GetHashCode()

Gibt den Hashcode für diesen instance zurück.

GetTypeCode()

Gibt den TypeCode Werttyp Singlezurück.

Hypot(Single, Single)

Berechnet die Hypotenuse mit zwei Werten, die die Längen der kürzeren Seiten in einem rechtwinkligen Dreieck darstellen.

Ieee754Remainder(Single, Single)

Berechnet den Rest von zwei Werten gemäß IEEE 754.

ILogB(Single)

Berechnet den ganzzahligen Logarithmus eines Werts.

IsEvenInteger(Single)

Bestimmt, ob ein Wert eine gerade integrale Zahl darstellt.

IsFinite(Single)

Bestimmt, ob der angegebene Wert endlich ist (Null, Unternormal oder Normal).

IsInfinity(Single)

Gibt einen Wert zurück, der angibt, ob die angegebene Zahl als negative oder positive Unendlichkeit ausgewertet wird.

IsInteger(Single)

Bestimmt, ob ein Wert einen integralen Wert darstellt.

IsNaN(Single)

Gibt einen Wert zurück, der angibt, ob der angegebene Wert keine Zahl (NaN) ist.

IsNegative(Single)

Bestimmt, ob der angegebene Wert negativ ist.

IsNegativeInfinity(Single)

Gibt einen Wert zurück, der angibt, ob die angegebene Zahl als negative Unendlichkeit ausgewertet wird.

IsNormal(Single)

Bestimmt, ob der angegebene Wert normal ist.

IsOddInteger(Single)

Bestimmt, ob ein Wert eine ungerade integrale Zahl darstellt.

IsPositive(Single)

Bestimmt, ob ein Wert positiv ist.

IsPositiveInfinity(Single)

Gibt einen Wert zurück, der angibt, ob die angegebene Zahl als positive Unendlichkeit ausgewertet wird.

IsPow2(Single)

Bestimmt, ob ein Wert eine Potenz von zwei ist.

IsRealNumber(Single)

Bestimmt, ob ein Wert eine reelle Zahl darstellt.

IsSubnormal(Single)

Bestimmt, ob der angegebene Wert subnormal ist.

Lerp(Single, Single, Single)

Führt eine lineare Interpolation zwischen zwei Werten basierend auf der angegebenen Gewichtung aus.

Log(Single, Single)

Berechnet den Logarithmus eines Werts in der angegebenen Basis.

Log(Single)

Berechnet den natürlichen (base-E Logarithmus eines Werts).

Log10(Single)

Berechnet den Logarithmus der Basis 10 eines Werts.

Log10P1(Single)

Berechnet den Logarithmus der Basis 10 eines Werts plus 1.

Log2(Single)

Berechnet das Protokoll2 eines Werts.

Log2P1(Single)

Berechnet den Logarithmus der Basis-2 eines Werts plus 1.

LogP1(Single)

Berechnet den natürlichen (base-E) Logarithmus eines Werts plus 1.

Max(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die größer ist.

MaxMagnitude(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die größer ist.

MaxMagnitudeNumber(Single, Single)

Vergleicht zwei Werte, um zu berechnen, die die größere Größe aufweisen und den anderen Wert zurückgeben, wenn eine Eingabe ist NaN.

MaxNative(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die mit plattformspezifischem Verhalten für NaN und NegativeZero.

MaxNumber(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die größer ist und den anderen Wert zurückgibt, wenn eine Eingabe ist NaN.

Min(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die kleiner ist.

MinMagnitude(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die kleiner ist.

MinMagnitudeNumber(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die die geringere Größe aufweist und den anderen Wert zurückgibt, wenn eine Eingabe ist NaN.

MinNative(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die mit plattformspezifischem Verhalten für NaN und NegativeZero.

MinNumber(Single, Single)

Vergleicht zwei Werte mit der Berechnung, die kleiner ist und den anderen Wert zurückgibt, wenn eine Eingabe ist NaN.

MultiplyAddEstimate(Single, Single, Single)

Berechnet eine Schätzung von (left * right) + . addend

Parse(ReadOnlySpan<Byte>, IFormatProvider)

Analysiert eine Spanne von UTF-8 Zeichen in einen Wert.

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

Analysiert eine Spanne von UTF-8 Zeichen in einen Wert.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Analysiert eine Spanne von Zeichen in einen Wert.

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

Konvertiert einen Zeichenbereich, der die Zeichenfolgendarstellung einer Zahl in einer angegebenen Formatvorlage und einem kulturspezifischen Format enthält, in dessen Gleitkommazahlenentsprechung mit einfacher Genauigkeit.

Parse(String, IFormatProvider)

Wandelt die Zeichenfolgendarstellung einer Zahl in einem angegebenen kulturspezifischen Format in dessen Gleitkommazahlenentsprechung mit einfacher Genauigkeit um.

Parse(String, NumberStyles, IFormatProvider)

Konvertiert die Zeichenfolgendarstellung einer Zahl in einer angegebenen Formatvorlage und einem kulturspezifischen Format in dessen Gleitkommazahlenentsprechung mit einfacher Genauigkeit.

Parse(String, NumberStyles)

Konvertiert die Zeichenfolgendarstellung einer Zahl in einer angegebenen Formatvorlage in dessen Gleitkommazahlenentsprechung mit einfacher Genauigkeit.

Parse(String)

Wandelt die Zeichenfolgendarstellung einer Zahl in die Gleitkommazahl mit einfacher Genauigkeit um.

Pow(Single, Single)

Berechnet einen Wert, der auf eine bestimmte Leistung erhöht wird.

RadiansToDegrees(Single)

Wandelt einen bestimmten Wert von Bogenmaß in Grad um.

ReciprocalEstimate(Single)

Berechnet eine Schätzung des Kehrwerts eines Werts.

ReciprocalSqrtEstimate(Single)

Berechnet eine Schätzung der gegenseitigen Quadratwurzel eines Werts.

RootN(Single, Int32)

Berechnet die n-th-Stammebene eines Werts.

Round(Single, Int32, MidpointRounding)

Rundet einen Wert auf eine angegebene Anzahl von Dezimalstellen mithilfe des standardmäßigen Rundungsmodus (ToEven).

Round(Single, Int32)

Rundet einen Wert auf eine angegebene Anzahl von Dezimalstellen mithilfe des standardmäßigen Rundungsmodus (ToEven).

Round(Single, MidpointRounding)

Rundet einen Wert mithilfe des angegebenen Rundungsmodus auf die nächste ganze Zahl.

Round(Single)

Rundet einen Wert mithilfe des standardmäßigen Rundungsmodus (ToEven) auf die nächste ganze Zahl ab.

ScaleB(Single, Int32)

Berechnet das Produkt eines Werts und dessen Basisradiix, das auf die angegebene Leistung angehoben wird.

Sign(Single)

Berechnet das Vorzeichen eines Werts.

Sin(Single)

Berechnet den Sinus eines Werts.

SinCos(Single)

Berechnet den Sinus und kosinus eines Werts.

SinCosPi(Single)

Berechnet den Sinus und kosinus eines Werts.

Sinh(Single)

Berechnet den hyperbolischen Sinus eines Werts.

SinPi(Single)

Berechnet den Sinus eines Werts, der multipliziert wurde.pi

Sqrt(Single)

Berechnet die Quadratwurzel eines Werts.

Tan(Single)

Berechnet den Tangens eines Werts.

Tanh(Single)

Berechnet den hyperbolischen Tangens eines Werts.

TanPi(Single)

Berechnet den Tangens eines Werts, der von pi.

ToString()

Konvertiert den numerischen Wert dieser Instanz in die entsprechende Zeichenfolgendarstellung.

ToString(IFormatProvider)

Wandelt den numerischen Wert dieser Instanz mithilfe der angegebenen kulturspezifischen Formatinformationen in die entsprechende Zeichenfolgendarstellung um.

ToString(String, IFormatProvider)

Wandelt den numerischen Wert dieser Instanz mithilfe der angegebenen Format- und kulturspezifischen Formatinformationen in die entsprechende Zeichenfolgendarstellung um.

ToString(String)

Wandelt den numerischen Wert dieser Instanz mithilfe des angegebenen Formats in die entsprechende Zeichenfolgendarstellung um.

Truncate(Single)

Schneidet einen Wert ab.

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Versucht, den Wert der aktuellen Instanz als UTF-8 in die bereitgestellte Bytespanne zu formatieren.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Versucht, den Wert der aktuellen Float-Zahleninstanz in den angegebenen Bereich von Zeichen zu formatieren.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Single)

Versucht, eine Spanne von UTF-8 Zeichen in einen Wert zu analysieren.

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Single)

Versucht, eine Spanne von UTF-8 Zeichen in einen Wert zu analysieren.

TryParse(ReadOnlySpan<Byte>, Single)

Versucht, einen UTF-8-Zeichenbereich zu konvertieren, der die Zeichenfolgendarstellung einer Zahl in seine Gleitkommazahlenentsprechung mit einfacher Genauigkeit enthält.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Single)

Versucht, einen Bereich von Zeichen in einen Wert zu analysieren.

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Single)

Wandelt die Spandarstellung einer Zahl in einem angegebenen Format und kulturspezifischen Format in dessen Gleitkommazahlenäquivalent mit einfacher Genauigkeit um. Ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war oder fehlgeschlagen ist.

TryParse(ReadOnlySpan<Char>, Single)

Wandelt die Zeichenfolgendarstellung einer Zahl in einer Zeichenspanne in die Gleitkommazahl mit einfacher Genauigkeit um. Ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war oder fehlgeschlagen ist.

TryParse(String, IFormatProvider, Single)

Versucht, eine Zeichenfolge in einen Wert zu analysieren.

TryParse(String, NumberStyles, IFormatProvider, Single)

Konvertiert die Zeichenfolgendarstellung einer Zahl in einer angegebenen Formatvorlage und einem kulturspezifischen Format in dessen Gleitkommazahlenentsprechung mit einfacher Genauigkeit. Ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war oder fehlgeschlagen ist.

TryParse(String, Single)

Wandelt die Zeichenfolgendarstellung einer Zahl in die Gleitkommazahl mit einfacher Genauigkeit um. Ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war oder fehlgeschlagen ist.

Operatoren

Name Beschreibung
Equality(Single, Single)

Gibt einen Wert zurück, der angibt, ob zwei angegebene Single Werte gleich sind.

GreaterThan(Single, Single)

Gibt einen Wert zurück, der angibt, ob ein angegebener Single Wert größer als ein anderer angegebener Single Wert ist.

GreaterThanOrEqual(Single, Single)

Gibt einen Wert zurück, der angibt, ob ein angegebener Single Wert größer oder gleich einem anderen angegebenen Single Wert ist.

Inequality(Single, Single)

Gibt einen Wert zurück, der angibt, ob zwei angegebene Single Werte nicht gleich sind.

LessThan(Single, Single)

Gibt einen Wert zurück, der angibt, ob ein angegebener Single Wert kleiner als ein anderer angegebener Single Wert ist.

LessThanOrEqual(Single, Single)

Gibt einen Wert zurück, der angibt, ob ein angegebener Single Wert kleiner oder gleich einem anderen angegebenen Single Wert ist.

Explizite Schnittstellenimplementierungen

Name Beschreibung
IAdditionOperators<Single,Single,Single>.Addition(Single, Single)

Addiert zwei Werte zusammen, um ihre Summe zu berechnen.

IAdditiveIdentity<Single,Single>.AdditiveIdentity

Ruft die additive Identität des aktuellen Typs ab.

IBinaryNumber<Single>.AllBitsSet

Ruft eine Instanz des binären Typs ab, in der alle Bits festgelegt sind.

IBitwiseOperators<Single,Single,Single>.BitwiseAnd(Single, Single)

Berechnet die bitweise und von zwei Werten.

IBitwiseOperators<Single,Single,Single>.BitwiseOr(Single, Single)

Berechnet die bitweise oder zwei Werte.

IBitwiseOperators<Single,Single,Single>.ExclusiveOr(Single, Single)

Berechnet die exklusiven oder zwei Werte.

IBitwiseOperators<Single,Single,Single>.OnesComplement(Single)

Berechnet die Darstellung eines bestimmten Werts.

IComparable.CompareTo(Object)

Vergleicht die aktuelle instance mit einem anderen Objekt desselben Typs und gibt eine ganze Zahl zurück, die angibt, ob das aktuelle instance vorangestellt, folgt oder an derselben Position in der Sortierreihenfolge wie das andere Objekt vorkommt.

IConvertible.GetTypeCode()

Gibt die TypeCode Für diese Instanz zurück.

IConvertible.ToBoolean(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToBoolean(IFormatProvider).

IConvertible.ToByte(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToByte(IFormatProvider).

IConvertible.ToChar(IFormatProvider)

Diese Konvertierung wird nicht unterstützt. Wenn Sie versuchen, diese Methode zu verwenden, wird ein InvalidCastException.

IConvertible.ToDateTime(IFormatProvider)

Diese Konvertierung wird nicht unterstützt. Wenn Sie versuchen, diese Methode zu verwenden, wird ein InvalidCastException.

IConvertible.ToDecimal(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToDecimal(IFormatProvider).

IConvertible.ToDouble(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToDouble(IFormatProvider).

IConvertible.ToInt16(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToInt16(IFormatProvider).

IConvertible.ToInt32(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToInt32(IFormatProvider).

IConvertible.ToInt64(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToInt64(IFormatProvider).

IConvertible.ToSByte(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToSByte(IFormatProvider).

IConvertible.ToSingle(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToSingle(IFormatProvider).

IConvertible.ToType(Type, IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToType(Type, IFormatProvider).

IConvertible.ToUInt16(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToUInt16(IFormatProvider).

IConvertible.ToUInt32(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToUInt32(IFormatProvider).

IConvertible.ToUInt64(IFormatProvider)

Eine Beschreibung dieses Mitglieds finden Sie unter ToUInt64(IFormatProvider).

IDecrementOperators<Single>.Decrement(Single)

Erhöht einen Wert.

IDivisionOperators<Single,Single,Single>.Division(Single, Single)

Dividiert einen Wert durch einen anderen, um seinen Quotienten zu berechnen.

IFloatingPoint<Single>.GetExponentByteCount()

Ruft die Anzahl der Bytes ab, die als Teil von TryWriteExponentLittleEndian(Span<Byte>, Int32).

IFloatingPoint<Single>.GetExponentShortestBitLength()

Ruft die Länge in Bits der kürzesten zwei Ergänzungsdarstellung des aktuellen Exponenten ab.

IFloatingPoint<Single>.GetSignificandBitLength()

Ruft die Länge des aktuellen Zeichens in Bits ab.

IFloatingPoint<Single>.GetSignificandByteCount()

Ruft die Anzahl der Bytes ab, die als Teil von TryWriteSignificandLittleEndian(Span<Byte>, Int32).

IFloatingPoint<Single>.TryWriteExponentBigEndian(Span<Byte>, Int32)

Versucht, den aktuellen Exponenten im Big-End-Format in eine bestimmte Spanne zu schreiben.

IFloatingPoint<Single>.TryWriteExponentLittleEndian(Span<Byte>, Int32)

Versucht, den aktuellen Exponenten in einem kleinen Endenformat in eine bestimmte Spanne zu schreiben.

IFloatingPoint<Single>.TryWriteSignificandBigEndian(Span<Byte>, Int32)

Versucht, das aktuelle Significand im Big-End-Format in eine bestimmte Spanne zu schreiben.

IFloatingPoint<Single>.TryWriteSignificandLittleEndian(Span<Byte>, Int32)

Versucht, das aktuelle Significand in little-endian-Format in eine bestimmte Spanne zu schreiben.

IFloatingPointConstants<Single>.E

Ruft die mathematische Konstante eab.

IFloatingPointConstants<Single>.Pi

Ruft die mathematische Konstante piab.

IFloatingPointConstants<Single>.Tau

Ruft die mathematische Konstante tauab.

IFloatingPointIeee754<Single>.Epsilon

Ruft den kleinsten Wert ab, der dem 0 nicht hinzugefügt 0werden kann.

IFloatingPointIeee754<Single>.NaN

Ruft einen Wert ab, der darstellt NaN.

IFloatingPointIeee754<Single>.NegativeInfinity

Ruft einen Wert ab, der negative infinitydarstellt.

IFloatingPointIeee754<Single>.NegativeZero

Ruft einen Wert ab, der negative zerodarstellt.

IFloatingPointIeee754<Single>.PositiveInfinity

Ruft einen Wert ab, der positive infinitydarstellt.

IIncrementOperators<Single>.Increment(Single)

Erhöht einen Wert.

IMinMaxValue<Single>.MaxValue

Ruft den Maximalwert des aktuellen Typs ab.

IMinMaxValue<Single>.MinValue

Ruft den Minimalwert des aktuellen Typs ab.

IModulusOperators<Single,Single,Single>.Modulus(Single, Single)

Dividiert zwei Werte zusammen, um deren Modul oder Rest zu berechnen.

IMultiplicativeIdentity<Single,Single>.MultiplicativeIdentity

Ruft die multiplizierte Identität des aktuellen Typs ab.

IMultiplyOperators<Single,Single,Single>.Multiply(Single, Single)

Multipliziert zwei Werte zusammen, um ihr Produkt zu berechnen.

INumberBase<Single>.IsCanonical(Single)

Bestimmt, ob sich ein Wert in seiner kanonischen Darstellung befindet.

INumberBase<Single>.IsComplexNumber(Single)

Bestimmt, ob ein Wert eine komplexe Zahl darstellt.

INumberBase<Single>.IsImaginaryNumber(Single)

Bestimmt, ob ein Wert eine reine imaginäre Zahl darstellt.

INumberBase<Single>.IsZero(Single)

Bestimmt, ob ein Wert null ist.

INumberBase<Single>.One

Ruft den Wert 1 für den Typ ab.

INumberBase<Single>.Radix

Ruft die Basis für den Typ ab.

INumberBase<Single>.TryConvertFromChecked<TOther>(TOther, Single)

Stellt eine Gleitkommazahl mit einfacher Genauigkeit dar.

INumberBase<Single>.TryConvertFromSaturating<TOther>(TOther, Single)

Stellt eine Gleitkommazahl mit einfacher Genauigkeit dar.

INumberBase<Single>.TryConvertFromTruncating<TOther>(TOther, Single)

Stellt eine Gleitkommazahl mit einfacher Genauigkeit dar.

INumberBase<Single>.TryConvertToChecked<TOther>(Single, TOther)

Versucht, eine Instanz des aktuellen Typs in einen anderen Typ zu konvertieren und löst eine Überlaufausnahme für alle Werte aus, die außerhalb des darstellbaren Bereichs des aktuellen Typs liegen.

INumberBase<Single>.TryConvertToSaturating<TOther>(Single, TOther)

Versucht, eine Instanz des aktuellen Typs in einen anderen Typ zu konvertieren und alle Werte zu sättigungen, die außerhalb des darstellbaren Bereichs des aktuellen Typs liegen.

INumberBase<Single>.TryConvertToTruncating<TOther>(Single, TOther)

Versucht, eine Instanz des aktuellen Typs in einen anderen Typ zu konvertieren, wobei alle Werte abgeschnitten werden, die außerhalb des darstellbaren Bereichs des aktuellen Typs liegen.

INumberBase<Single>.Zero

Ruft den Wert 0 für den Typ ab.

ISignedNumber<Single>.NegativeOne

Ruft den Wert -1 für den Typ ab.

ISubtractionOperators<Single,Single,Single>.Subtraction(Single, Single)

Subtrahiert zwei Werte, um ihre Differenz zu berechnen.

IUnaryNegationOperators<Single,Single>.UnaryNegation(Single)

Berechnet die unäre Negation eines Werts.

IUnaryPlusOperators<Single,Single>.UnaryPlus(Single)

Berechnet das unäre Pluszeichen eines Werts.

Gilt für:

Threadsicherheit

Alle Elemente dieses Typs sind threadsicher. Elemente, die den Instanzstatus ändern möchten, geben tatsächlich eine neue Instanz zurück, die mit dem neuen Wert initialisiert wurde. Wie bei jedem anderen Typ muss das Lesen und Schreiben in eine freigegebene Variable, die eine Instanz dieses Typs enthält, durch eine Sperre geschützt werden, um die Threadsicherheit zu gewährleisten.

Weitere Informationen