Single Struct-datatyp
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Representerar en flyttalstyp med enkel precision.
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
- Arv
- Attribut
- Implementeringar
-
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>
Kommentarer
Värdetypen Single representerar ett 32-bitars tal med enkel precision med värden som sträcker sig från negativa 3,402823e38 till positiva 3,402823e38, samt positiv eller negativ noll, PositiveInfinity, NegativeInfinityoch inte ett tal (NaN). Det är avsett att representera värden som är extremt stora (till exempel avstånd mellan planeter eller galaxer) eller extremt små (till exempel molekylmassan hos ett ämne i kg) och som ofta är oprecisa (till exempel avståndet från jorden till ett annat solsystem). Den Single-typen uppfyller IEC 60559:1989-standarden (IEEE 754) för binär flyttalsaritmetik.
System.Single innehåller metoder för att jämföra instanser av den här typen, konvertera värdet för en instans till dess strängrepresentation och konvertera strängrepresentationen av ett tal till en instans av den här typen. Information om hur formatspecifikationskoder styr strängrepresentationen av värdetyper finns i Formateringstyper, Standard numeriska formatsträngar och Anpassade numeriska formatsträngar.
Flyttalsrepresentation och precision
Datatypen Single lagrar flyttalsvärden med enkel precision i ett 32-bitars binärt format, enligt följande tabell:
| Del | Bitar |
|---|---|
| Signifikand eller mantissa | 0-22 |
| Exponent | 23-30 |
| Tecken (0 = positivt, 1 = negativt) | 31 |
Precis som decimaltal inte exakt kan representera vissa bråkvärden (till exempel 1/3 eller #B0) kan binära bråk inte representera vissa bråkvärden. Till exempel representeras 2/10, som exakt representeras av .2 som ett decimaltal, av .0011111001001100 som en binär fraktion, där mönstret "1100" upprepas till oändligheten. I det här fallet ger flyttalsvärdet en oprecis representation av det tal som det representerar. Att utföra ytterligare matematiska åtgärder på det ursprungliga flyttalsvärdet ökar ofta dess brist på precision. Om du till exempel jämför resultatet av att multiplicera .3 med 10 och lägga till .3 till .3 nio gånger ser du att tillägget ger det mindre exakta resultatet, eftersom det omfattar åtta fler åtgärder än multiplikation. Observera att den här skillnaden endast är uppenbar om du visar de två Single värdena med hjälp av standardsträngen "R" i numeriskt format, som vid behov visar alla 9 precisionssiffror som stöds av Single typen.
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
Eftersom vissa tal inte kan representeras exakt som binära bråkvärden kan flyttalsnummer endast ungefärliga reala tal.
Alla flyttalsnummer har ett begränsat antal signifikanta siffror, vilket också avgör hur exakt ett flyttalsvärde ungefärliger ett verkligt tal. Ett Single värde har upp till 7 decimaler med precision, även om högst 9 siffror bibehålls internt. Det innebär att vissa flyttalsoperationer kan sakna precision för att påverka ett flyttalsvärde. I följande exempel definieras ett stort flyttalsvärde med enkel precision och sedan läggs produkten av Single.Epsilon och en kvadrillion till den. Produkten är dock för liten för att kunna ändra det ursprungliga flyttalsvärdet. Den minst signifikanta siffran är tusendelar, medan den viktigaste siffran i produkten är 10-30.
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
Den begränsade precisionen för ett flyttalsnummer har flera konsekvenser:
Två flyttalsnummer som verkar lika med en viss precision kanske inte jämförs lika med eftersom deras minst signifikanta siffror skiljer sig åt. I följande exempel läggs en serie tal ihop och deras totalsumma jämförs med den förväntade summan. Ett anrop till
Equalsmetoden anger att värdena inte är lika med.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).De två värdena är olika på grund av en förlust av precision under tilläggsåtgärderna. I det här fallet kan problemet lösas genom att anropa Math.Round(Double, Int32) metoden för att avrunda Single värdena till önskad precision innan jämförelsen utförs.
En matematisk åtgärd eller jämförelseåtgärd som använder ett flyttalsnummer kanske inte ger samma resultat om ett decimaltal används, eftersom det binära flyttalsnumret kanske inte är lika med decimaltalet. Ett tidigare exempel illustrerade detta genom att visa resultatet av att multiplicera .3 med 10 och lägga till .3 till .3 nio gånger.
När noggrannhet i numeriska åtgärder med bråkvärden är viktigt använder du Decimal typen i stället för typen Single . När noggrannhet i numeriska operationer med integralvärden utanför intervallet för typerna Int64 eller UInt64 är viktigt, använd typen BigInteger.
Single värden har mindre precision än Double värden. Ett Single värde som konverteras till en till synes ekvivalent DoubleDouble är ofta inte lika med värdet på grund av skillnader i precision. I följande exempel tilldelas resultatet av identiska divisionsåtgärder till ett Double värde och ett Single värde. När värdet i Single har omvandlats till en Double, visar en jämförelse av de två värdena att de är olika.
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: Falseopen 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: FalseModule 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: FalseUndvik det här problemet genom att antingen använda Double datatypen i stället för Single datatypen eller använda Round metoden så att båda värdena har samma precision.
Test för likhet
För att betraktas som lika måste två Single värden representera identiska värden. Men på grund av skillnader i precision mellan värden, eller på grund av en förlust av precision med ett eller båda värdena, visar sig flyttalsvärden som förväntas vara identiska ofta vara ojämlika på grund av skillnader i deras minst signifikanta siffror. Därför innebär anrop till Equals-metoden för att avgöra om två värden är lika, eller anrop till CompareTo-metoden för att fastställa relationen mellan två Single-värden, ofta oväntade resultat. Detta är tydligt i följande exempel, där två till synes lika Single värden visar sig vara ojämlika, eftersom det första värdet har 7 siffror precision, medan det andra värdet har 9.
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
Beräknade värden som följer olika kodsökvägar och som manipuleras på olika sätt visar sig ofta vara ojämlika. I följande exempel upphöjs ett Single värde till två och sedan beräknas kvadratroten för att återställa det ursprungliga värdet. En andra Single multipliceras med 3,51 och kvadreras innan kvadratroten av resultatet divideras med 3,51 för att återställa det ursprungliga värdet. Även om de två värdena verkar vara identiska anger ett anrop till Equals(Single)-metoden att de inte är lika.
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
I de fall där en förlust av precision sannolikt kommer att påverka resultatet av en jämförelse kan du använda följande tekniker i stället för att anropa Equals metoden eller CompareTo :
Anropa Math.Round-metoden för att säkerställa att båda värdena har samma noggrannhet. I följande exempel ändras ett tidigare exempel för att använda den här metoden så att två bråkvärden är likvärdiga.
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: Trueopen 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: TrueModule 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: TrueProblemet med precision gäller fortfarande för avrundning av mittpunktsvärden. Mer information finns i Math.Round(Double, Int32, MidpointRounding)-metoden.
Testa för ungefärlig likhet i stället för likhet. Den här tekniken kräver att du antingen definierar en absolut mängd med vilken de två värdena kan skilja sig men fortfarande vara lika med, eller att du definierar en relativ mängd med vilken det mindre värdet kan avvika från det större värdet.
Varning
Single.Epsilon används ibland som ett absolut mått på avståndet mellan två Single värden vid likhetstestning. Dock mäter Single.Epsilon det minsta möjliga värde som kan läggas till en Single, eller subtraheras från en Single, vars värde är noll. För de flesta positiva och negativa Single värden är värdet Single.Epsilon för för litet för att identifieras. Med undantag för värden som är noll rekommenderar vi därför inte att det används i tester för likhet.
I följande exempel används den senare metoden för att definiera en
IsApproximatelyEqual-metod som testar den relativa skillnaden mellan två värden. Det kontrasterar också resultatet av anrop tillIsApproximatelyEqualmetoden och Equals(Single) metoden.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: Trueopen 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: TruePublic 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
Flyttalsvärden och undantag
Åtgärder med flyttalsvärden utlöser inte undantag, till skillnad från åtgärder med integrerade typer, som utlöser undantag i fall av olagliga åtgärder som division med noll eller spill. I dessa situationer är resultatet av en flyttalsåtgärd i stället noll, positiv oändlighet, negativ oändlighet eller inte ett tal (NaN):
Om resultatet av en flyttalsåtgärd är för litet för målformatet blir resultatet noll. Detta kan inträffa när två mycket små flyttalsnummer multipliceras, vilket visas i följande exempel.
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: Truelet 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: TrueModule 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: TrueOm storleken på resultatet av en flyttalsåtgärd överskrider målformatets intervall är PositiveInfinity resultatet av åtgärden eller NegativeInfinity, beroende på resultatets tecken. Resultatet av en operation som spiller över Single.MaxValue är PositiveInfinity, och resultatet av en operation som spiller över Single.MinValue är NegativeInfinity, som visas i följande exempel.
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: Trueopen 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: TrueModule 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: TruePositiveInfinity resultat från en division med noll med en positiv utdelning och NegativeInfinity resultat från en division med noll med negativ utdelning.
Om en flyttalsoperation är ogiltig är resultatet av operationen NaN. Till exempel NaN resulterar från följande operationer:
- Division med noll med en utdelning på noll. Observera att andra divisionsfall med noll resulterar i antingen PositiveInfinity eller NegativeInfinity.
- Alla flyttalsoperationer med ogiltiga värden. Om du till exempel försöker hitta kvadratroten för ett negativt värde returneras NaN.
- Alla åtgärder med ett argument vars värde är Single.NaN.
Typkonverteringar
Den Single strukturen definierar inte några explicita eller implicita konverteringsoperatorer. I stället implementeras konverteringar av kompilatorn.
I följande tabell visas möjliga konverteringar av ett värde för de andra primitiva numeriska typerna till ett Single värde. Den anger också om konverteringen breddar eller minskar och om resultatet Single kan ha mindre precision än det ursprungliga värdet.
| Konvertering från | Breddning/förträngning | Möjlig förlust av precision |
|---|---|---|
| Byte | Breddning | No |
| Decimal | Breddning Observera att C# kräver en cast-operator. |
Yes. Decimal stöder 29 decimaler med precision. Single stöder 9. |
| Double | Förträngning; värden utanför tillåtna gränser konverteras till Double.NegativeInfinity eller Double.PositiveInfinity. | Yes. Double stöder 17 decimaler med precision. Single stöder 9. |
| Int16 | Breddning | No |
| Int32 | Breddning | Yes. Int32 stöder 10 decimaltal med precision. Single stöder 9. |
| Int64 | Breddning | Yes. Int64 stöder 19 decimaltal med precision. Single stöder 9. |
| SByte | Breddning | No |
| UInt16 | Breddning | No |
| UInt32 | Breddning | Yes. UInt32 stöder 10 decimaltal med precision. Single stöder 9. |
| UInt64 | Breddning | Yes. Int64 stöder 20 decimaltal med precision. Single stöder 9. |
I följande exempel konverteras det lägsta eller högsta värdet för andra primitiva numeriska typer till ett Single värde.
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)
Dessutom konverteras Double värdena Double.NaN, Double.PositiveInfinity och Double.NegativeInfinity till Single.NaN, Single.PositiveInfinity och Single.NegativeInfinity.
Observera att konverteringen av värdet för vissa numeriska typer till ett Single värde kan innebära en förlust av precision. Som exemplet visar är en förlust av precision möjlig när du konverterar Decimal, Double, Int32, Int64, UInt32och UInt64 värden till Single värden.
Konverteringen av ett Single värde till en Double är en bredare konvertering. Konverteringen kan leda till en precisionsförlust om Double typen inte har en exakt representation av Single värdet.
Konverteringen av ett Single värde till ett värde av någon annan primitiv numerisk datatyp än en Double är en begränsad konvertering och kräver en cast-operator (i C#) eller en konverteringsmetod (i Visual Basic). Värden som ligger utanför intervallet för måldatatypen, som definieras av måltypens MinValue och MaxValue egenskaperna, fungerar som det visas i följande tabell.
| Måltyp | Result |
|---|---|
| Alla typer av integraler | Ett OverflowException undantag om konverteringen sker i ett kontrollerat sammanhang. Om konverteringen sker i en omarkerad kontext (standardvärdet i C#) lyckas konverteringsåtgärden men värdet flödar över. |
| Decimal | Ett OverflowException undantag. |
Dessutom Single.NaN, Single.PositiveInfinity och Single.NegativeInfinity kastar ett OverflowException för konverteringar till heltal i en kontrollerad miljö, men dessa värden flödar över när de konverteras till heltal i en obegränsad miljö. För konverteringar till Decimal kastar de alltid en OverflowException. För konverteringar till Doublekonverteras de till Double.NaN, Double.PositiveInfinityrespektive Double.NegativeInfinity.
Observera att en förlust av precision kan bero på att ett värde konverteras till en Single annan numerisk typ. Om du konverterar icke-integralvärden Single , som utdata från exemplet visar, går bråkkomponenten förlorad när Single värdet antingen avrundas (som i Visual Basic) eller trunkeras (som i C# och F#). För konverteringar till Decimal värden Single kanske värdet inte har någon exakt representation i måldatatypen.
I följande exempel konverteras några Single värden till flera andra numeriska typer. Konverteringarna sker i en markerad kontext i Visual Basic (standard), i C# (på grund av det markerade nyckelordet) och i F# (på grund av -instruktionen open Checked ). Utdata från exemplet visar resultatet för konverteringar i både en markerad och omarkerad kontext. Du kan utföra konverteringar i en omarkerad kontext i Visual Basic genom att kompilera med /removeintchecks+ kompilatorväxeln, i C# genom att kommentera ut -instruktionen checked och i F# genom att kommentera ut -instruktionen open Checked .
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)
Mer information om konvertering av numeriska typer finns i Type Conversion in .NET och Type Conversion Tables.
Flyttalsfunktionalitet
Strukturen Single och relaterade typer tillhandahåller metoder för att utföra följande åtgärdskategorier:
Jämförelse av värden. Du kan anropa Equals metoden för att avgöra om två Single värden är lika med eller CompareTo metoden för att fastställa relationen mellan två värden.
Den Single-strukturen stöder också en fullständig uppsättning jämförelseoperatorer. Du kan till exempel testa för likhet eller ojämlikhet, eller avgöra om ett värde är större än eller lika med ett annat värde. Om en av operanderna är en DoubleSingle konverteras värdet till en Double innan jämförelsen utförs. Om en av operanderna är en integrerad typ konverteras den till en Single innan jämförelsen utförs. Även om dessa är bredare konverteringar kan de innebära en förlust av precision.
Varning
På grund av skillnader i precision kan två Single värden som du förväntar dig vara lika med visa sig vara ojämlika, vilket påverkar resultatet av jämförelsen. Mer information om hur du jämför två värden finns i avsnittet Single.
Du kan också anropa IsNaNmetoderna , IsInfinity, IsPositiveInfinityoch IsNegativeInfinity för att testa dessa specialvärden.
Matematiska operationer. Vanliga aritmetiska åtgärder som addition, subtraktion, multiplikation och division implementeras av språkkompilatorer och CIL-instruktioner (Common Intermediate Language) snarare än med Single metoder. Om den andra operanden i en matematisk åtgärd är en Doublekonverteras den Single till en Double innan åtgärden utförs, och resultatet av åtgärden är också ett Double värde. Om den andra operanden är en integrerad typ konverteras den till en Single innan åtgärden utförs, och resultatet av åtgärden är också ett Single värde.
Du kan utföra andra matematiska åtgärder genom att anropa
static(Sharedi Visual Basic)-metoder i System.Math klassen. Dessa inkluderar ytterligare metoder som ofta används för aritmetik (till exempel , och Math.Abs), geometri (till exempel Math.Sign och Math.Sqrt) och kalkyl (till exempel Math.Cos). Math.SinMath.Log I samtliga fall konverteras det Single värdet till en Double.Du kan också hantera de enskilda bitarna i ett Single värde. BitConverter.GetBytes(Single)-metoden returnerar sitt bitmönster i en bytearray. Genom att skicka bytematrisen BitConverter.ToInt32 till metoden kan du också bevara Single värdets bitmönster i ett 32-bitars heltal.
Avrundning. Avrundning används ofta som en teknik för att minska effekten av skillnader mellan värden som orsakas av problem med flyttalsrepresentation och precision. Du kan avrunda ett Single värde genom att Math.Round anropa metoden. Observera dock att Single värdet konverteras till en Double innan metoden anropas, och konverteringen kan innebära en förlust av precision.
B0 formatering A1 Du kan konvertera ett Single värde till dess strängrepresentation genom att anropa ToString metoden eller med hjälp av funktionen för sammansatt formatering . Information om hur formatsträngar styr strängrepresentationen av flyttalsvärden finns i Standard numeriska formatsträngar och Anpassade numeriska formatsträngar.
Parsning av strängar. Du kan konvertera strängrepresentationen av ett flyttalsvärde till ett Single värde genom att anropa Parse metoden eller TryParse . Om parsningsåtgärden Parse misslyckas utlöser metoden ett undantag, medan TryParse metoden returnerar
false.Typkonvertering. Strukturen Single tillhandahåller en explicit gränssnittsimplementering för IConvertible gränssnittet, som stöder konvertering mellan två standarddatatyper för .NET. Språkkompilatorer stöder också implicit konvertering av värden för alla andra numeriska standardtyper förutom konvertering av Double till Single värden. Konvertering av ett värde av någon annan standardtyp än en Double till en Single är en bredare konvertering och kräver inte användning av en gjutningsoperator eller konverteringsmetod.
Konvertering av 32-bitars- och 64-bitars heltalsvärden kan dock innebära en förlust av precision. I följande tabell visas skillnaderna i precision för 32-bitars, 64-bitars och Double typer:
Type Maximal precision (decimaler) Intern precision (decimalplatser) Double 15 17 Int32 och UInt32 10 10 Int64 och UInt64 19 19 Single 7 9 Problemet med precision påverkar oftast Single-värden som konverteras till Double-värden. I följande exempel är två värden som genereras av identiska divisionsåtgärder ojämlika, eftersom ett av värdena är ett flyttal med enkel precision som konverteras till en Double.
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: Falselet 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: FalseDim 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
Fält
| Name | Description |
|---|---|
| E |
Representerar den naturliga logaritmiska basen, som anges av konstanten, e. |
| Epsilon |
Representerar det minsta positiva Single värdet som är större än noll. Det här fältet är konstant. |
| MaxValue |
Representerar det största möjliga värdet för Single. Det här fältet är konstant. |
| MinValue |
Representerar det minsta möjliga värdet för Single. Det här fältet är konstant. |
| NaN |
Representerar inte ett tal ( |
| NegativeInfinity |
Representerar negativ oändlighet. Det här fältet är konstant. |
| NegativeZero |
Representerar talets negativa nolla (-0). |
| Pi |
Representerar förhållandet mellan en cirkels omkrets och dess diameter, som anges av konstanten, π. |
| PositiveInfinity |
Representerar positiv oändlighet. Det här fältet är konstant. |
| Tau |
Representerar antalet radianer i en tur, som anges av konstanten, τ. |
Metoder
| Name | Description |
|---|---|
| Abs(Single) |
Beräknar det absoluta värdet. |
| Acos(Single) |
Beräknar arc-cosinus för ett värde. |
| Acosh(Single) |
Beräknar hyperbolisk arc-cosinus för ett värde. |
| AcosPi(Single) |
Beräknar arc-cosinus för ett värde och delar resultatet |
| Asin(Single) |
Beräknar arc-sinus för ett värde. |
| Asinh(Single) |
Beräknar hyperbolisk arc-sinus för ett värde. |
| AsinPi(Single) |
Beräknar arc-sinus för ett värde och delar resultatet |
| Atan(Single) |
Beräknar arc-tangenten för ett värde. |
| Atan2(Single, Single) |
Beräknar arc-tangenten för kvoten för två värden. |
| Atan2Pi(Single, Single) |
Beräknar arc-tangenten för kvoten för två värden och delar resultatet |
| Atanh(Single) |
Beräknar hyperbolisk arc-tangens för ett värde. |
| AtanPi(Single) |
Beräknar arc-tangenten för ett värde och delar resultatet med pi. |
| BitDecrement(Single) |
Returnerar det största värdet som jämför mindre än ett angivet värde. |
| BitIncrement(Single) |
Returnerar det minsta värde som jämför större än ett angivet värde. |
| Cbrt(Single) |
Beräknar kubroten för ett värde. |
| Ceiling(Single) |
Beräknar taket för ett värde. |
| Clamp(Single, Single, Single) |
Klämmer fast ett värde till ett inkluderande lägsta och högsta värde. |
| ClampNative(Single, Single, Single) |
Klämmer fast ett värde till ett inkluderande lägsta och högsta värde med hjälp av plattformsspecifikt beteende för |
| CompareTo(Object) |
Jämför den här instansen med ett angivet objekt och returnerar ett heltal som anger om värdet för den här instansen är mindre än, lika med eller större än värdet för det angivna objektet. |
| CompareTo(Single) |
Jämför den här instansen med ett angivet flyttal med enkel precision och returnerar ett heltal som anger om värdet för den här instansen är mindre än, lika med eller större än värdet för det angivna flyttalsnumret med enkel precision. |
| ConvertToInteger<TInteger>(Single) |
Konverterar ett värde till en angiven heltalstyp med mättnad vid spill |
| ConvertToIntegerNative<TInteger>(Single) |
Konverterar ett värde till en angiven heltalstyp med plattformsspecifikt beteende vid spill. |
| CopySign(Single, Single) |
Kopierar tecknet för ett värde till tecknet för ett annat värde. |
| Cos(Single) |
Beräknar cosininen för ett värde. |
| Cosh(Single) |
Beräknar hyperbolisk cosiné för ett värde. |
| CosPi(Single) |
Beräknar cosininen för ett värde som har multiplats av |
| CreateChecked<TOther>(TOther) |
Skapar en instans av den aktuella typen från ett värde, vilket utlöser ett spill-undantag för värden som ligger utanför det representerarbara intervallet för den aktuella typen. |
| CreateSaturating<TOther>(TOther) |
Skapar en instans av den aktuella typen från ett värde som mättar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen. |
| CreateTruncating<TOther>(TOther) |
Skapar en instans av den aktuella typen från ett värde och trunkerar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen. |
| DegreesToRadians(Single) |
Konverterar ett givet värde från grader till radianer. |
| Equals(Object) |
Returnerar ett värde som anger om den här instansen är lika med ett angivet objekt. |
| Equals(Single) |
Returnerar ett värde som anger om den här instansen och ett angivet Single objekt representerar samma värde. |
| Exp(Single) |
Beräkningar som har genererats |
| Exp10(Single) |
Beräkningar som har genererats |
| Exp10M1(Single) |
Beräkningar som genereras |
| Exp2(Single) |
Beräkningar som har genererats |
| Exp2M1(Single) |
Beräkningar som genereras |
| ExpM1(Single) |
Beräkningar som genereras |
| Floor(Single) |
Beräknar golvet i ett värde. |
| FusedMultiplyAdd(Single, Single, Single) |
Beräknar det sammansvetsade multiplikationstillägget med tre värden. |
| GetHashCode() |
Returnerar hash-koden för den här instansen. |
| GetTypeCode() | |
| Hypot(Single, Single) |
Beräknar hypotenuse med två värden som representerar längden på de kortare sidorna i en högervinklad triangel. |
| Ieee754Remainder(Single, Single) |
Beräknar resten av två värden enligt IEEE 754. |
| ILogB(Single) |
Beräknar heltalsloggaritmen för ett värde. |
| IsEvenInteger(Single) |
Avgör om ett värde representerar ett jämnt heltal. |
| IsFinite(Single) |
Avgör om det angivna värdet är begränsat (noll, subnormalt eller normalt). |
| IsInfinity(Single) |
Returnerar ett värde som anger om det angivna talet utvärderas till negativ eller positiv oändlighet. |
| IsInteger(Single) |
Avgör om ett värde representerar ett integralvärde. |
| IsNaN(Single) |
Returnerar ett värde som anger om det angivna värdet inte är ett tal (NaN). |
| IsNegative(Single) |
Avgör om det angivna värdet är negativt. |
| IsNegativeInfinity(Single) |
Returnerar ett värde som anger om det angivna talet utvärderas till negativ oändlighet. |
| IsNormal(Single) |
Avgör om det angivna värdet är normalt. |
| IsOddInteger(Single) |
Avgör om ett värde representerar ett udda integraltal. |
| IsPositive(Single) |
Avgör om ett värde är positivt. |
| IsPositiveInfinity(Single) |
Returnerar ett värde som anger om det angivna talet utvärderas till positiv oändlighet. |
| IsPow2(Single) |
Avgör om ett värde är en kraft på två. |
| IsRealNumber(Single) |
Avgör om ett värde representerar ett verkligt tal. |
| IsSubnormal(Single) |
Avgör om det angivna värdet är subnormalt. |
| Lerp(Single, Single, Single) |
Utför en linjär interpolering mellan två värden baserat på den angivna vikten. |
| Log(Single, Single) |
Beräknar logaritmen för ett värde i den angivna basen. |
| Log(Single) |
Beräknar det naturliga ( |
| Log10(Single) |
Beräknar base-10-logaritmen för ett värde. |
| Log10P1(Single) |
Beräknar logaritmen base-10 för ett värde plus ett. |
| Log2(Single) |
Beräknar log2 för ett värde. |
| Log2P1(Single) |
Beräknar base-2-logaritmen för ett värde plus ett. |
| LogP1(Single) |
Beräknar den naturliga ( |
| Max(Single, Single) |
Jämför två värden med beräkning som är större. |
| MaxMagnitude(Single, Single) |
Jämför två värden med beräkning som är större. |
| MaxMagnitudeNumber(Single, Single) |
Jämför två värden med beräkning som har större storlek och returnerar det andra värdet om en indata är |
| MaxNative(Single, Single) |
Jämför två värden med beräkning som är större med plattformsspecifikt beteende för |
| MaxNumber(Single, Single) |
Jämför två värden med beräkning som är större och returnerar det andra värdet om en indata är |
| Min(Single, Single) |
Jämför två värden med beräkning som är mindre. |
| MinMagnitude(Single, Single) |
Jämför två värden med beräkning som är mindre. |
| MinMagnitudeNumber(Single, Single) |
Jämför två värden med beräkning som har mindre storlek och returnerar det andra värdet om en indata är |
| MinNative(Single, Single) |
Jämför två värden med beräkning som är mindre med plattformsspecifikt beteende för |
| MinNumber(Single, Single) |
Jämför två värden med beräkning som är mindre och returnerar det andra värdet om en indata är |
| MultiplyAddEstimate(Single, Single, Single) |
Beräknar en uppskattning av ( |
| Parse(ReadOnlySpan<Byte>, IFormatProvider) |
Parsar ett intervall med UTF-8 tecken till ett värde. |
| Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider) |
Parsar ett intervall med UTF-8 tecken till ett värde. |
| Parse(ReadOnlySpan<Char>, IFormatProvider) |
Parsar ett teckenintervall till ett värde. |
| Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Konverterar ett teckenintervall som innehåller strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess flytande punktnummer med enkel precision. |
| Parse(String, IFormatProvider) |
Konverterar strängrepresentationen av ett tal i ett angivet kulturspecifikt format till dess flytande punktnummer med enkel precision. |
| Parse(String, NumberStyles, IFormatProvider) |
Konverterar strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess flytande punktnummer med enkel precision. |
| Parse(String, NumberStyles) |
Konverterar strängrepresentationen av ett tal i ett angivet format till dess flytande punktnummer med enkel precision. |
| Parse(String) |
Konverterar strängrepresentationen av ett tal till dess flyttalsnummer med enkel precision. |
| Pow(Single, Single) |
Beräknar ett värde som har upphöjts till en viss effekt. |
| RadiansToDegrees(Single) |
Konverterar ett givet värde från radianer till grader. |
| ReciprocalEstimate(Single) |
Beräknar en uppskattning av ett värdes ömsesidiga värde. |
| ReciprocalSqrtEstimate(Single) |
Beräknar en uppskattning av den ömsesidiga kvadratroten för ett värde. |
| RootN(Single, Int32) |
Beräknar den n:e roten för ett värde. |
| Round(Single, Int32, MidpointRounding) |
Avrundar ett värde till ett angivet antal bråksiffror med standard avrundningsläget (ToEven). |
| Round(Single, Int32) |
Avrundar ett värde till ett angivet antal bråksiffror med standard avrundningsläget (ToEven). |
| Round(Single, MidpointRounding) |
Avrundar ett värde till närmaste heltal med det angivna avrundningsläget. |
| Round(Single) |
Avrundar ett värde till närmaste heltal med standard avrundningsläget (ToEven). |
| ScaleB(Single, Int32) |
Beräknar produkten av ett värde och dess basradix upphöjt till den angivna kraften. |
| Sign(Single) |
Beräknar tecknet för ett värde. |
| Sin(Single) |
Beräknar sinus för ett värde. |
| SinCos(Single) |
Beräknar sinus och cosinus för ett värde. |
| SinCosPi(Single) |
Beräknar sinus och cosinus för ett värde. |
| Sinh(Single) |
Beräknar hyperbolisk sinus för ett värde. |
| SinPi(Single) |
Beräknar sinus för ett värde som har multiplicerats |
| Sqrt(Single) |
Beräknar kvadratroten för ett värde. |
| Tan(Single) |
Beräknar tangensen för ett värde. |
| Tanh(Single) |
Beräknar hyperbolisk tangens för ett värde. |
| TanPi(Single) |
Beräknar tangensen för ett värde som har multipelts av |
| ToString() |
Konverterar det numeriska värdet för den här instansen till motsvarande strängrepresentation. |
| ToString(IFormatProvider) |
Konverterar det numeriska värdet för den här instansen till motsvarande strängrepresentation med den angivna kulturspecifika formatinformationen. |
| ToString(String, IFormatProvider) |
Konverterar det numeriska värdet för den här instansen till motsvarande strängrepresentation med det angivna formatet och den kulturspecifika formatinformationen. |
| ToString(String) |
Konverterar det numeriska värdet för den här instansen till motsvarande strängrepresentation med det angivna formatet. |
| Truncate(Single) |
Trunkerar ett värde. |
| TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Försöker formatera värdet för den aktuella instansen som UTF-8 i det angivna byteintervallet. |
| TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Försöker formatera värdet för den aktuella flyttalsnummerinstansen till det angivna intervallet med tecken. |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, Single) |
Försöker parsa ett intervall med UTF-8 tecken till ett värde. |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Single) |
Försöker parsa ett intervall med UTF-8 tecken till ett värde. |
| TryParse(ReadOnlySpan<Byte>, Single) |
Försöker konvertera ett UTF-8-teckensintervall som innehåller strängrepresentationen av ett tal till dess flytande punktnummer med enkel precision. |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, Single) |
Försöker parsa ett teckenintervall till ett värde. |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Single) |
Konverterar spännviddsrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess flytande punktnummer med enkel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
| TryParse(ReadOnlySpan<Char>, Single) |
Konverterar strängrepresentationen av ett tal i ett teckenintervall till dess flytande punktnummer med enkel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
| TryParse(String, IFormatProvider, Single) |
Försöker parsa en sträng till ett värde. |
| TryParse(String, NumberStyles, IFormatProvider, Single) |
Konverterar strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess flytande punktnummer med enkel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
| TryParse(String, Single) |
Konverterar strängrepresentationen av ett tal till dess flyttalsnummer med enkel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
Operatorer
| Name | Description |
|---|---|
| Equality(Single, Single) |
Returnerar ett värde som anger om två angivna Single värden är lika med. |
| GreaterThan(Single, Single) |
Returnerar ett värde som anger om ett angivet Single värde är större än ett annat angivet Single värde. |
| GreaterThanOrEqual(Single, Single) |
Returnerar ett värde som anger om ett angivet Single värde är större än eller lika med ett annat angivet Single värde. |
| Inequality(Single, Single) |
Returnerar ett värde som anger om två angivna Single värden inte är lika med. |
| LessThan(Single, Single) |
Returnerar ett värde som anger om ett angivet Single värde är mindre än ett annat angivet Single värde. |
| LessThanOrEqual(Single, Single) |
Returnerar ett värde som anger om ett angivet Single värde är mindre än eller lika med ett annat angivet Single värde. |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| IAdditionOperators<Single,Single,Single>.Addition(Single, Single) |
Lägger till två värden tillsammans för att beräkna summan. |
| IAdditiveIdentity<Single,Single>.AdditiveIdentity |
Hämtar den aktuella typens additiva identitet. |
| IBinaryNumber<Single>.AllBitsSet |
Hämtar en instans av den binära typen där alla bitar anges. |
| IBitwiseOperators<Single,Single,Single>.BitwiseAnd(Single, Single) |
Beräknar bitvis och av två värden. |
| IBitwiseOperators<Single,Single,Single>.BitwiseOr(Single, Single) |
Beräknar bitvis eller två värden. |
| IBitwiseOperators<Single,Single,Single>.ExclusiveOr(Single, Single) |
Beräknar uteslutande eller av två värden. |
| IBitwiseOperators<Single,Single,Single>.OnesComplement(Single) |
Beräknar enkomplementrepresentationen av ett visst värde. |
| IComparable.CompareTo(Object) |
Jämför den aktuella instansen med ett annat objekt av samma typ och returnerar ett heltal som anger om den aktuella instansen föregår, följer eller inträffar i samma position i sorteringsordningen som det andra objektet. |
| IConvertible.GetTypeCode() |
Returnerar för den här instansen TypeCode . |
| IConvertible.ToBoolean(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToBoolean(IFormatProvider). |
| IConvertible.ToByte(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToByte(IFormatProvider). |
| IConvertible.ToChar(IFormatProvider) |
Den här konverteringen stöds inte. Om du försöker använda den här metoden utlöser en InvalidCastException. |
| IConvertible.ToDateTime(IFormatProvider) |
Den här konverteringen stöds inte. Om du försöker använda den här metoden utlöser en InvalidCastException. |
| IConvertible.ToDecimal(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToDecimal(IFormatProvider). |
| IConvertible.ToDouble(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToDouble(IFormatProvider). |
| IConvertible.ToInt16(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToInt16(IFormatProvider). |
| IConvertible.ToInt32(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToInt32(IFormatProvider). |
| IConvertible.ToInt64(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToInt64(IFormatProvider). |
| IConvertible.ToSByte(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToSByte(IFormatProvider). |
| IConvertible.ToSingle(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToSingle(IFormatProvider). |
| IConvertible.ToType(Type, IFormatProvider) |
En beskrivning av den här medlemmen finns i ToType(Type, IFormatProvider). |
| IConvertible.ToUInt16(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToUInt16(IFormatProvider). |
| IConvertible.ToUInt32(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToUInt32(IFormatProvider). |
| IConvertible.ToUInt64(IFormatProvider) |
En beskrivning av den här medlemmen finns i ToUInt64(IFormatProvider). |
| IDecrementOperators<Single>.Decrement(Single) |
Minskar ett värde. |
| IDivisionOperators<Single,Single,Single>.Division(Single, Single) |
Delar upp ett värde med ett annat för att beräkna deras kvot. |
| IFloatingPoint<Single>.GetExponentByteCount() |
Hämtar antalet byte som ska skrivas som en del av TryWriteExponentLittleEndian(Span<Byte>, Int32). |
| IFloatingPoint<Single>.GetExponentShortestBitLength() |
Hämtar längden, i bitar, på de kortaste tvås komplementrepresentation av den aktuella exponenten. |
| IFloatingPoint<Single>.GetSignificandBitLength() |
Hämtar längden, i bitar, på den aktuella significanden. |
| IFloatingPoint<Single>.GetSignificandByteCount() |
Hämtar antalet byte som ska skrivas som en del av TryWriteSignificandLittleEndian(Span<Byte>, Int32). |
| IFloatingPoint<Single>.TryWriteExponentBigEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella exponenten, i stor endianskt format, till ett givet spann. |
| IFloatingPoint<Single>.TryWriteExponentLittleEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella exponenten, i lite endianskt format, till ett givet spann. |
| IFloatingPoint<Single>.TryWriteSignificandBigEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella significand, i big-endian format, till ett visst spann. |
| IFloatingPoint<Single>.TryWriteSignificandLittleEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella significand, i lite-endian format, till ett givet spann. |
| IFloatingPointConstants<Single>.E |
Hämtar den matematiska konstanten |
| IFloatingPointConstants<Single>.Pi |
Hämtar den matematiska konstanten |
| IFloatingPointConstants<Single>.Tau |
Hämtar den matematiska konstanten |
| IFloatingPointIeee754<Single>.Epsilon |
Hämtar det minsta värdet som kan läggas till |
| IFloatingPointIeee754<Single>.NaN |
Hämtar ett värde som representerar |
| IFloatingPointIeee754<Single>.NegativeInfinity |
Hämtar ett värde som representerar negativt |
| IFloatingPointIeee754<Single>.NegativeZero |
Hämtar ett värde som representerar negativt |
| IFloatingPointIeee754<Single>.PositiveInfinity |
Hämtar ett värde som representerar positivt |
| IIncrementOperators<Single>.Increment(Single) |
Ökar ett värde. |
| IMinMaxValue<Single>.MaxValue |
Hämtar det maximala värdet för den aktuella typen. |
| IMinMaxValue<Single>.MinValue |
Hämtar det lägsta värdet för den aktuella typen. |
| IModulusOperators<Single,Single,Single>.Modulus(Single, Single) |
Delar upp två värden för att beräkna deras modulus eller rest. |
| IMultiplicativeIdentity<Single,Single>.MultiplicativeIdentity |
Hämtar den multiplicativa identiteten för den aktuella typen. |
| IMultiplyOperators<Single,Single,Single>.Multiply(Single, Single) |
Multiplicerar två värden tillsammans för att beräkna produkten. |
| INumberBase<Single>.IsCanonical(Single) |
Avgör om ett värde finns i dess kanoniska representation. |
| INumberBase<Single>.IsComplexNumber(Single) |
Avgör om ett värde representerar ett komplext tal. |
| INumberBase<Single>.IsImaginaryNumber(Single) |
Avgör om ett värde representerar ett rent imaginärt tal. |
| INumberBase<Single>.IsZero(Single) |
Avgör om ett värde är noll. |
| INumberBase<Single>.One |
Hämtar värdet |
| INumberBase<Single>.Radix |
Hämtar radixet, eller basen, för typen. |
| INumberBase<Single>.TryConvertFromChecked<TOther>(TOther, Single) |
Representerar en flyttalstyp med enkel precision. |
| INumberBase<Single>.TryConvertFromSaturating<TOther>(TOther, Single) |
Representerar en flyttalstyp med enkel precision. |
| INumberBase<Single>.TryConvertFromTruncating<TOther>(TOther, Single) |
Representerar en flyttalstyp med enkel precision. |
| INumberBase<Single>.TryConvertToChecked<TOther>(Single, TOther) |
Försöker konvertera en instans av den aktuella typen till en annan typ, vilket utlöser ett spill-undantag för värden som ligger utanför det representerarbara intervallet för den aktuella typen. |
| INumberBase<Single>.TryConvertToSaturating<TOther>(Single, TOther) |
Försöker konvertera en instans av den aktuella typen till en annan typ, vilket mättar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen. |
| INumberBase<Single>.TryConvertToTruncating<TOther>(Single, TOther) |
Försöker konvertera en instans av den aktuella typen till en annan typ och trunkerar alla värden som ligger utanför det representerarbara intervallet för den aktuella typen. |
| INumberBase<Single>.Zero |
Hämtar värdet |
| ISignedNumber<Single>.NegativeOne |
Hämtar värdet |
| ISubtractionOperators<Single,Single,Single>.Subtraction(Single, Single) |
Subtraherar två värden för att beräkna skillnaden. |
| IUnaryNegationOperators<Single,Single>.UnaryNegation(Single) |
Beräknar en oharisk negation av ett värde. |
| IUnaryPlusOperators<Single,Single>.UnaryPlus(Single) |
Beräknar det unary plus av ett värde. |
Gäller för
Trådsäkerhet
Alla medlemmar av den här typen är trådsäkra. Medlemmar som verkar ändra instanstillstånd returnerar faktiskt en ny instans som initierats med det nya värdet. Precis som med andra typer måste läsning och skrivning till en delad variabel som innehåller en instans av den här typen skyddas av ett lås för att garantera trådsäkerheten.