Double 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 ett flyttal med dubbel precision.
public value class double : IComparable, IComparable<double>, IConvertible, IEquatable<double>, IFormattable
public value class double : IComparable<double>, IConvertible, IEquatable<double>, IParsable<double>, ISpanParsable<double>, IUtf8SpanParsable<double>, System::Numerics::IAdditionOperators<double, double, double>, System::Numerics::IAdditiveIdentity<double, double>, System::Numerics::IBinaryFloatingPointIeee754<double>, System::Numerics::IBinaryNumber<double>, System::Numerics::IBitwiseOperators<double, double, double>, System::Numerics::IComparisonOperators<double, double, bool>, System::Numerics::IDecrementOperators<double>, System::Numerics::IDivisionOperators<double, double, double>, System::Numerics::IEqualityOperators<double, double, bool>, System::Numerics::IExponentialFunctions<double>, System::Numerics::IFloatingPoint<double>, System::Numerics::IFloatingPointConstants<double>, System::Numerics::IFloatingPointIeee754<double>, System::Numerics::IHyperbolicFunctions<double>, System::Numerics::IIncrementOperators<double>, System::Numerics::ILogarithmicFunctions<double>, System::Numerics::IMinMaxValue<double>, System::Numerics::IModulusOperators<double, double, double>, System::Numerics::IMultiplicativeIdentity<double, double>, System::Numerics::IMultiplyOperators<double, double, double>, System::Numerics::INumber<double>, System::Numerics::INumberBase<double>, System::Numerics::IPowerFunctions<double>, System::Numerics::IRootFunctions<double>, System::Numerics::ISignedNumber<double>, System::Numerics::ISubtractionOperators<double, double, double>, System::Numerics::ITrigonometricFunctions<double>, System::Numerics::IUnaryNegationOperators<double, double>, System::Numerics::IUnaryPlusOperators<double, double>
public value class double : IComparable, IComparable<double>, IConvertible, IEquatable<double>, ISpanFormattable
public value class double : IComparable<double>, IConvertible, IEquatable<double>, IParsable<double>, ISpanParsable<double>, System::Numerics::IAdditionOperators<double, double, double>, System::Numerics::IAdditiveIdentity<double, double>, System::Numerics::IBinaryFloatingPointIeee754<double>, System::Numerics::IBinaryNumber<double>, System::Numerics::IBitwiseOperators<double, double, double>, System::Numerics::IComparisonOperators<double, double, bool>, System::Numerics::IDecrementOperators<double>, System::Numerics::IDivisionOperators<double, double, double>, System::Numerics::IEqualityOperators<double, double, bool>, System::Numerics::IExponentialFunctions<double>, System::Numerics::IFloatingPoint<double>, System::Numerics::IFloatingPointConstants<double>, System::Numerics::IFloatingPointIeee754<double>, System::Numerics::IHyperbolicFunctions<double>, System::Numerics::IIncrementOperators<double>, System::Numerics::ILogarithmicFunctions<double>, System::Numerics::IMinMaxValue<double>, System::Numerics::IModulusOperators<double, double, double>, System::Numerics::IMultiplicativeIdentity<double, double>, System::Numerics::IMultiplyOperators<double, double, double>, System::Numerics::INumber<double>, System::Numerics::INumberBase<double>, System::Numerics::IPowerFunctions<double>, System::Numerics::IRootFunctions<double>, System::Numerics::ISignedNumber<double>, System::Numerics::ISubtractionOperators<double, double, double>, System::Numerics::ITrigonometricFunctions<double>, System::Numerics::IUnaryNegationOperators<double, double>, System::Numerics::IUnaryPlusOperators<double, double>
public value class double : IComparable, IConvertible, IFormattable
public value class double : IComparable, IComparable<double>, IEquatable<double>, IFormattable
public struct Double : IComparable, IComparable<double>, IConvertible, IEquatable<double>, IFormattable
public readonly struct Double : IComparable<double>, IConvertible, IEquatable<double>, IParsable<double>, ISpanParsable<double>, IUtf8SpanParsable<double>, System.Numerics.IAdditionOperators<double,double,double>, System.Numerics.IAdditiveIdentity<double,double>, System.Numerics.IBinaryFloatingPointIeee754<double>, System.Numerics.IBinaryNumber<double>, System.Numerics.IBitwiseOperators<double,double,double>, System.Numerics.IComparisonOperators<double,double,bool>, System.Numerics.IDecrementOperators<double>, System.Numerics.IDivisionOperators<double,double,double>, System.Numerics.IEqualityOperators<double,double,bool>, System.Numerics.IExponentialFunctions<double>, System.Numerics.IFloatingPoint<double>, System.Numerics.IFloatingPointConstants<double>, System.Numerics.IFloatingPointIeee754<double>, System.Numerics.IHyperbolicFunctions<double>, System.Numerics.IIncrementOperators<double>, System.Numerics.ILogarithmicFunctions<double>, System.Numerics.IMinMaxValue<double>, System.Numerics.IModulusOperators<double,double,double>, System.Numerics.IMultiplicativeIdentity<double,double>, System.Numerics.IMultiplyOperators<double,double,double>, System.Numerics.INumber<double>, System.Numerics.INumberBase<double>, System.Numerics.IPowerFunctions<double>, System.Numerics.IRootFunctions<double>, System.Numerics.ISignedNumber<double>, System.Numerics.ISubtractionOperators<double,double,double>, System.Numerics.ITrigonometricFunctions<double>, System.Numerics.IUnaryNegationOperators<double,double>, System.Numerics.IUnaryPlusOperators<double,double>
public readonly struct Double : IComparable, IComparable<double>, IConvertible, IEquatable<double>, IFormattable
public readonly struct Double : IComparable, IComparable<double>, IConvertible, IEquatable<double>, ISpanFormattable
public readonly struct Double : IComparable<double>, IConvertible, IEquatable<double>, IParsable<double>, ISpanParsable<double>, System.Numerics.IAdditionOperators<double,double,double>, System.Numerics.IAdditiveIdentity<double,double>, System.Numerics.IBinaryFloatingPointIeee754<double>, System.Numerics.IBinaryNumber<double>, System.Numerics.IBitwiseOperators<double,double,double>, System.Numerics.IComparisonOperators<double,double,bool>, System.Numerics.IDecrementOperators<double>, System.Numerics.IDivisionOperators<double,double,double>, System.Numerics.IEqualityOperators<double,double,bool>, System.Numerics.IExponentialFunctions<double>, System.Numerics.IFloatingPoint<double>, System.Numerics.IFloatingPointConstants<double>, System.Numerics.IFloatingPointIeee754<double>, System.Numerics.IHyperbolicFunctions<double>, System.Numerics.IIncrementOperators<double>, System.Numerics.ILogarithmicFunctions<double>, System.Numerics.IMinMaxValue<double>, System.Numerics.IModulusOperators<double,double,double>, System.Numerics.IMultiplicativeIdentity<double,double>, System.Numerics.IMultiplyOperators<double,double,double>, System.Numerics.INumber<double>, System.Numerics.INumberBase<double>, System.Numerics.IPowerFunctions<double>, System.Numerics.IRootFunctions<double>, System.Numerics.ISignedNumber<double>, System.Numerics.ISubtractionOperators<double,double,double>, System.Numerics.ITrigonometricFunctions<double>, System.Numerics.IUnaryNegationOperators<double,double>, System.Numerics.IUnaryPlusOperators<double,double>
[System.Serializable]
public struct Double : IComparable, IConvertible, IFormattable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Double : IComparable, IComparable<double>, IConvertible, IEquatable<double>, IFormattable
public struct Double : IComparable, IComparable<double>, IEquatable<double>, IFormattable
type double = struct
interface IConvertible
interface IFormattable
type double = struct
interface IConvertible
interface IFormattable
interface IParsable<double>
interface ISpanFormattable
interface ISpanParsable<double>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<double>
interface IAdditionOperators<double, double, double>
interface IAdditiveIdentity<double, double>
interface IBinaryFloatingPointIeee754<double>
interface IBinaryNumber<double>
interface IBitwiseOperators<double, double, double>
interface IComparisonOperators<double, double, bool>
interface IEqualityOperators<double, double, bool>
interface IDecrementOperators<double>
interface IDivisionOperators<double, double, double>
interface IIncrementOperators<double>
interface IModulusOperators<double, double, double>
interface IMultiplicativeIdentity<double, double>
interface IMultiplyOperators<double, double, double>
interface INumber<double>
interface INumberBase<double>
interface ISubtractionOperators<double, double, double>
interface IUnaryNegationOperators<double, double>
interface IUnaryPlusOperators<double, double>
interface IExponentialFunctions<double>
interface IFloatingPointConstants<double>
interface IFloatingPoint<double>
interface ISignedNumber<double>
interface IFloatingPointIeee754<double>
interface IHyperbolicFunctions<double>
interface ILogarithmicFunctions<double>
interface IPowerFunctions<double>
interface IRootFunctions<double>
interface ITrigonometricFunctions<double>
interface IMinMaxValue<double>
type double = struct
interface IConvertible
interface ISpanFormattable
interface IFormattable
type double = struct
interface IConvertible
interface IFormattable
interface IParsable<double>
interface ISpanFormattable
interface ISpanParsable<double>
interface IAdditionOperators<double, double, double>
interface IAdditiveIdentity<double, double>
interface IBinaryFloatingPointIeee754<double>
interface IBinaryNumber<double>
interface IBitwiseOperators<double, double, double>
interface IComparisonOperators<double, double, bool>
interface IEqualityOperators<double, double, bool>
interface IDecrementOperators<double>
interface IDivisionOperators<double, double, double>
interface IIncrementOperators<double>
interface IModulusOperators<double, double, double>
interface IMultiplicativeIdentity<double, double>
interface IMultiplyOperators<double, double, double>
interface INumber<double>
interface INumberBase<double>
interface ISubtractionOperators<double, double, double>
interface IUnaryNegationOperators<double, double>
interface IUnaryPlusOperators<double, double>
interface IExponentialFunctions<double>
interface IFloatingPointConstants<double>
interface IFloatingPoint<double>
interface ISignedNumber<double>
interface IFloatingPointIeee754<double>
interface IHyperbolicFunctions<double>
interface ILogarithmicFunctions<double>
interface IPowerFunctions<double>
interface IRootFunctions<double>
interface ITrigonometricFunctions<double>
interface IMinMaxValue<double>
type double = struct
interface IConvertible
interface IFormattable
interface IParsable<double>
interface ISpanFormattable
interface ISpanParsable<double>
interface IAdditionOperators<double, double, double>
interface IAdditiveIdentity<double, double>
interface IBinaryFloatingPointIeee754<double>
interface IBinaryNumber<double>
interface IBitwiseOperators<double, double, double>
interface IComparisonOperators<double, double, bool>
interface IEqualityOperators<double, double, bool>
interface IDecrementOperators<double>
interface IDivisionOperators<double, double, double>
interface IIncrementOperators<double>
interface IModulusOperators<double, double, double>
interface IMultiplicativeIdentity<double, double>
interface IMultiplyOperators<double, double, double>
interface INumber<double>
interface INumberBase<double>
interface ISubtractionOperators<double, double, double>
interface IUnaryNegationOperators<double, double>
interface IUnaryPlusOperators<double, double>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<double>
interface IExponentialFunctions<double>
interface IFloatingPointConstants<double>
interface IFloatingPoint<double>
interface ISignedNumber<double>
interface IFloatingPointIeee754<double>
interface IHyperbolicFunctions<double>
interface ILogarithmicFunctions<double>
interface IPowerFunctions<double>
interface IRootFunctions<double>
interface ITrigonometricFunctions<double>
interface IMinMaxValue<double>
[<System.Serializable>]
type double = struct
interface IFormattable
interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type double = struct
interface IFormattable
interface IConvertible
type double = struct
interface IFormattable
Public Structure Double
Implements IComparable, IComparable(Of Double), IConvertible, IEquatable(Of Double), IFormattable
Public Structure Double
Implements IAdditionOperators(Of Double, Double, Double), IAdditiveIdentity(Of Double, Double), IBinaryFloatingPointIeee754(Of Double), IBinaryNumber(Of Double), IBitwiseOperators(Of Double, Double, Double), IComparable(Of Double), IComparisonOperators(Of Double, Double, Boolean), IConvertible, IDecrementOperators(Of Double), IDivisionOperators(Of Double, Double, Double), IEqualityOperators(Of Double, Double, Boolean), IEquatable(Of Double), IExponentialFunctions(Of Double), IFloatingPoint(Of Double), IFloatingPointConstants(Of Double), IFloatingPointIeee754(Of Double), IHyperbolicFunctions(Of Double), IIncrementOperators(Of Double), ILogarithmicFunctions(Of Double), IMinMaxValue(Of Double), IModulusOperators(Of Double, Double, Double), IMultiplicativeIdentity(Of Double, Double), IMultiplyOperators(Of Double, Double, Double), INumber(Of Double), INumberBase(Of Double), IParsable(Of Double), IPowerFunctions(Of Double), IRootFunctions(Of Double), ISignedNumber(Of Double), ISpanParsable(Of Double), ISubtractionOperators(Of Double, Double, Double), ITrigonometricFunctions(Of Double), IUnaryNegationOperators(Of Double, Double), IUnaryPlusOperators(Of Double, Double), IUtf8SpanParsable(Of Double)
Public Structure Double
Implements IComparable, IComparable(Of Double), IConvertible, IEquatable(Of Double), ISpanFormattable
Public Structure Double
Implements IAdditionOperators(Of Double, Double, Double), IAdditiveIdentity(Of Double, Double), IBinaryFloatingPointIeee754(Of Double), IBinaryNumber(Of Double), IBitwiseOperators(Of Double, Double, Double), IComparable(Of Double), IComparisonOperators(Of Double, Double, Boolean), IConvertible, IDecrementOperators(Of Double), IDivisionOperators(Of Double, Double, Double), IEqualityOperators(Of Double, Double, Boolean), IEquatable(Of Double), IExponentialFunctions(Of Double), IFloatingPoint(Of Double), IFloatingPointConstants(Of Double), IFloatingPointIeee754(Of Double), IHyperbolicFunctions(Of Double), IIncrementOperators(Of Double), ILogarithmicFunctions(Of Double), IMinMaxValue(Of Double), IModulusOperators(Of Double, Double, Double), IMultiplicativeIdentity(Of Double, Double), IMultiplyOperators(Of Double, Double, Double), INumber(Of Double), INumberBase(Of Double), IParsable(Of Double), IPowerFunctions(Of Double), IRootFunctions(Of Double), ISignedNumber(Of Double), ISpanParsable(Of Double), ISubtractionOperators(Of Double, Double, Double), ITrigonometricFunctions(Of Double), IUnaryNegationOperators(Of Double, Double), IUnaryPlusOperators(Of Double, Double)
Public Structure Double
Implements IComparable, IConvertible, IFormattable
Public Structure Double
Implements IComparable, IComparable(Of Double), IEquatable(Of Double), IFormattable
- Arv
- Attribut
- Implementeringar
-
IComparable IComparable<Double> IConvertible IEquatable<Double> IFormattable IComparable<TSelf> IEquatable<TSelf> IParsable<Double> IParsable<TSelf> ISpanFormattable ISpanParsable<Double> ISpanParsable<TSelf> IUtf8SpanFormattable IUtf8SpanParsable<Double> IUtf8SpanParsable<TSelf> IAdditionOperators<Double,Double,Double> IAdditionOperators<TSelf,TSelf,TSelf> IAdditiveIdentity<Double,Double> IAdditiveIdentity<TSelf,TSelf> IBinaryFloatingPointIeee754<Double> IBinaryNumber<Double> IBinaryNumber<TSelf> IBitwiseOperators<Double,Double,Double> IBitwiseOperators<TSelf,TSelf,TSelf> IComparisonOperators<Double,Double,Boolean> IComparisonOperators<TSelf,TSelf,Boolean> IDecrementOperators<Double> IDecrementOperators<TSelf> IDivisionOperators<Double,Double,Double> IDivisionOperators<TSelf,TSelf,TSelf> IEqualityOperators<Double,Double,Boolean> IEqualityOperators<TSelf,TOther,TResult> IEqualityOperators<TSelf,TSelf,Boolean> IExponentialFunctions<Double> IExponentialFunctions<TSelf> IFloatingPoint<Double> IFloatingPoint<TSelf> IFloatingPointConstants<Double> IFloatingPointConstants<TSelf> IFloatingPointIeee754<Double> IFloatingPointIeee754<TSelf> IHyperbolicFunctions<Double> IHyperbolicFunctions<TSelf> IIncrementOperators<Double> IIncrementOperators<TSelf> ILogarithmicFunctions<Double> ILogarithmicFunctions<TSelf> IMinMaxValue<Double> IModulusOperators<Double,Double,Double> IModulusOperators<TSelf,TSelf,TSelf> IMultiplicativeIdentity<Double,Double> IMultiplicativeIdentity<TSelf,TSelf> IMultiplyOperators<Double,Double,Double> IMultiplyOperators<TSelf,TSelf,TSelf> INumber<Double> INumber<TSelf> INumberBase<Double> INumberBase<TSelf> IPowerFunctions<Double> IPowerFunctions<TSelf> IRootFunctions<Double> IRootFunctions<TSelf> ISignedNumber<Double> ISignedNumber<TSelf> ISubtractionOperators<Double,Double,Double> ISubtractionOperators<TSelf,TSelf,TSelf> ITrigonometricFunctions<Double> ITrigonometricFunctions<TSelf> IUnaryNegationOperators<Double,Double> IUnaryNegationOperators<TSelf,TSelf> IUnaryPlusOperators<Double,Double> IUnaryPlusOperators<TSelf,TSelf>
Exempel
Följande kodexempel illustrerar användningen av Double:
// The Temperature class stores the temperature as a Double
// and delegates most of the functionality to the Double
// implementation.
public class Temperature : IComparable, IFormattable
{
// IComparable.CompareTo implementation.
public int CompareTo(object obj) {
if (obj == null) return 1;
Temperature temp = obj as Temperature;
if (obj != null)
return m_value.CompareTo(temp.m_value);
else
throw new ArgumentException("object is not a Temperature");
}
// IFormattable.ToString implementation.
public string ToString(string format, IFormatProvider provider) {
if( format != null ) {
if( format.Equals("F") ) {
return String.Format("{0}'F", this.Value.ToString());
}
if( format.Equals("C") ) {
return String.Format("{0}'C", this.Celsius.ToString());
}
}
return m_value.ToString(format, provider);
}
// Parses the temperature from a string in the form
// [ws][sign]digits['F|'C][ws]
public static Temperature Parse(string s, NumberStyles styles, IFormatProvider provider) {
Temperature temp = new Temperature();
if( s.TrimEnd(null).EndsWith("'F") ) {
temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider);
}
else if( s.TrimEnd(null).EndsWith("'C") ) {
temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider);
}
else {
temp.Value = Double.Parse(s, styles, provider);
}
return temp;
}
// The value holder
protected double m_value;
public double Value {
get {
return m_value;
}
set {
m_value = value;
}
}
public double Celsius {
get {
return (m_value-32.0)/1.8;
}
set {
m_value = 1.8*value+32.0;
}
}
}
// The Temperature class stores the temperature as a Double
// and delegates most of the functionality to the Double
// implementation.
type Temperature() =
member val Value = 0. with get, set
member this.Celsius
with get () = (this.Value - 32.) / 1.8
and set (value) =
this.Value <- 1.8 * value + 32.
// Parses the temperature from a string in the form
// [ws][sign]digits['F|'C][ws]
static member Parse(s: string, styles: NumberStyles, provider: IFormatProvider) =
let temp = Temperature()
if s.TrimEnd(null).EndsWith "'F" then
temp.Value <- Double.Parse(s.Remove(s.LastIndexOf '\'', 2), styles, provider)
elif s.TrimEnd(null).EndsWith "'C" then
temp.Celsius <- Double.Parse(s.Remove(s.LastIndexOf '\'', 2), styles, provider)
else
temp.Value <- Double.Parse(s, styles, provider)
temp
interface IComparable with
// IComparable.CompareTo implementation.
member this.CompareTo(obj: obj) =
match obj with
| null -> 1
| :? Temperature as temp ->
this.Value.CompareTo temp.Value
| _ ->
invalidArg "obj" "object is not a Temperature"
interface IFormattable with
// IFormattable.ToString implementation.
member this.ToString(format: string, provider: IFormatProvider) =
match format with
| "F" ->
$"{this.Value}'F"
| "C" ->
$"{this.Celsius}'C"
| _ ->
this.Value.ToString(format, provider)
' Temperature class stores the value as Double
' and delegates most of the functionality
' to the Double implementation.
Public Class Temperature
Implements IComparable, IFormattable
Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
Implements IComparable.CompareTo
If TypeOf obj Is Temperature Then
Dim temp As Temperature = CType(obj, Temperature)
Return m_value.CompareTo(temp.m_value)
End If
Throw New ArgumentException("object is not a Temperature")
End Function
Public Overloads Function ToString(ByVal format As String, ByVal provider As IFormatProvider) As String _
Implements IFormattable.ToString
If Not (format Is Nothing) Then
If format.Equals("F") Then
Return [String].Format("{0}'F", Me.Value.ToString())
End If
If format.Equals("C") Then
Return [String].Format("{0}'C", Me.Celsius.ToString())
End If
End If
Return m_value.ToString(format, provider)
End Function
' Parses the temperature from a string in form
' [ws][sign]digits['F|'C][ws]
Public Shared Function Parse(ByVal s As String, ByVal styles As NumberStyles, ByVal provider As IFormatProvider) As Temperature
Dim temp As New Temperature()
If s.TrimEnd().EndsWith("'F") Then
temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), styles, provider)
Else
If s.TrimEnd().EndsWith("'C") Then
temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), styles, provider)
Else
temp.Value = Double.Parse(s, styles, provider)
End If
End If
Return temp
End Function
' The value holder
Protected m_value As Double
Public Property Value() As Double
Get
Return m_value
End Get
Set(ByVal Value As Double)
m_value = Value
End Set
End Property
Public Property Celsius() As Double
Get
Return (m_value - 32) / 1.8
End Get
Set(ByVal Value As Double)
m_value = Value * 1.8 + 32
End Set
End Property
End Class
Kommentarer
Värdetypen Double representerar ett 64-bitars tal med dubbel precision med värden från negativa 1,79769313486232e308 till positiva 1,79769313486232e308, samt positiv eller negativ nolla, PositiveInfinity, NegativeInfinity, och 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 kilo) och som ofta är oprecisa (till exempel avståndet från jorden till ett annat solsystem). Den Double-typen uppfyller IEC 60559:1989-standarden (IEEE 754) för binär flyttalsaritmetik.
Flyttalsrepresentation och precision
Datatypen Double lagrar flyttalsvärden med dubbel precision i ett 64-bitars binärt format, enligt följande tabell:
| Del | Bitar |
|---|---|
| Signifikand eller mantissa | 0-51 |
| Exponent | 52-62 |
| Tecken (0 = Positiv, 1 = Negativ) | 63 |
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 1/10, som exakt representeras av .1 som ett decimaltal, av .001100110011 som en binär fraktion, där mönstret "0011" 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 operationer på det ursprungliga flyttalsvärdet tenderar ofta att öka dess brist på precision. Om du till exempel jämför resultatet av att multiplicera .1 med 10 och lägga till .1 till .1 nio gånger, ser du att tillägget, eftersom det har involverat ytterligare åtta åtgärder, har gett det mindre exakta resultatet. (Före .NET 10 visas endast den här skillnaden om du visar de två Double-värdena med hjälp av "R" standardsträngen i numeriskt format, som visar upp till alla 17 precisionssiffror som stöds av Double typ.)
using System;
public class Example13
{
public static void Main()
{
Double value = .1;
Double result1 = value * 10;
Double result2 = 0;
for (int ctr = 1; ctr <= 10; ctr++)
result2 += value;
Console.WriteLine($".1 * 10: {result1:R}");
Console.WriteLine($".1 Added 10 times: {result2:R}");
}
}
// The example displays the following output:
// .1 * 10: 1
// .1 Added 10 times: 0.99999999999999989
let value = 0.1
let result1 = value * 10.
let mutable result2 = 0.
for i = 1 to 10 do
result2 <- result2 + value
printfn $".1 * 10: {result1:R}"
printfn $".1 Added 10 times: {result2:R}"
// The example displays the following output:
// .1 * 10: 1
// .1 Added 10 times: 0.99999999999999989
Module Example14
Public Sub Run()
Dim value As Double = 0.1
Dim result1 As Double = value * 10
Dim result2 As Double
For ctr As Integer = 1 To 10
result2 += value
Next
Console.WriteLine(".1 * 10: {0:R}", result1)
Console.WriteLine(".1 Added 10 times: {0:R}", result2)
End Sub
End Module
' The example displays the following output:
' .1 * 10: 1
' .1 Added 10 times: 0.99999999999999989
Eftersom vissa tal inte kan representeras exakt som binära bråktal kan flyttalsnummer bara ungefärliga reala tal.
Alla flyttalsnummer har också ett begränsat antal signifikanta siffror, vilket också avgör hur exakt ett flyttalsvärde ungefärliger ett verkligt tal. Ett Double värde har upp till 15 decimaler med precision, även om högst 17 siffror bibehålls internt. Det innebär att vissa flyttalsoperationer kan sakna precision för att ändra ett flyttalsvärde. I följande exempel visas en bild. Det definierar ett mycket stort flyttalvärde och lägger sedan till produkten av Double.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-309.
using System;
public class Example14
{
public static void Main()
{
Double value = 123456789012.34567;
Double additional = Double.Epsilon * 1e15;
Console.WriteLine($"{value} + {additional} = {value + additional}");
}
}
// The example displays the following output:
// 123456789012.346 + 4.94065645841247E-309 = 123456789012.346
open System
let value = 123456789012.34567
let additional = Double.Epsilon * 1e15
printfn $"{value} + {additional} = {value + additional}"
// The example displays the following output:
// 123456789012.346 + 4.94065645841247E-309 = 123456789012.346
Module Example15
Public Sub Run()
Dim value As Double = 123456789012.34567
Dim additional As Double = Double.Epsilon * 1.0E+15
Console.WriteLine("{0} + {1} = {2}", value, additional,
value + additional)
End Sub
End Module
' The example displays the following output:
' 123456789012.346 + 4.94065645841247E-309 = 123456789012.346
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.
using System; public class Example10 { public static void Main() { Double[] values = { 10.0, 2.88, 2.88, 2.88, 9.0 }; Double result = 27.64; Double total = 0; 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: // The sum of the values (36.64) does not equal the total (36.64). // // 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.639999999999997) does not equal the total (27.64).let values = [ 10.0; 2.88; 2.88; 2.88; 9.0 ] let result = 27.64 let total = List.sum values 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 (36.64) does not equal the total (36.64). // // 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.639999999999997) does not equal the total (27.64).Module Example11 Public Sub Run() Dim values() As Double = {10.0, 2.88, 2.88, 2.88, 9.0} Dim result As Double = 27.64 Dim total As Double 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 ({0}) does not equal the total ({1}).", total, result) End If End Sub End Module ' The example displays the following output: ' The sum of the values (36.64) does not equal the total (36.64). ' ' 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.639999999999997) does not equal the total (27.64).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 Double 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 .1 med 10 och lägga till .1 gånger.
När noggrannhet i numeriska åtgärder med bråkvärden är viktigt kan du använda Decimal typen i stället för Double typen. När noggrannhet i numeriska åtgärder med integralvärden utanför intervallet för typerna Int128UInt128 är viktigt använder du BigInteger typen.
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 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 använda Double i stället för Single-datatypen, eller genom att använda Round-metoden så att båda värdena har samma precision.
Dessutom kan resultatet av aritmetiska åtgärder och tilldelningsåtgärder med Double värden skilja sig något efter plattform på grund av förlust av precision av Double typen. Till exempel kan resultatet av att tilldela ett literalvärde Double skilja sig åt i 32-bitars- och 64-bitarsversionerna av .NET. I följande exempel visas den här skillnaden när literalvärdet -4.42330604244772E-305 och en variabel vars värde är -4.42330604244772E-305 tilldelas till en Double variabel. Observera att resultatet av Parse(String) metoden i det här fallet inte lider av en förlust av precision.
double value = -4.42330604244772E-305;
double fromLiteral = -4.42330604244772E-305;
double fromVariable = value;
double fromParse = double.Parse("-4.42330604244772E-305");
Console.WriteLine("Double value from literal: {0,29:R}", fromLiteral);
Console.WriteLine("Double value from variable: {0,28:R}", fromVariable);
Console.WriteLine("Double value from Parse method: {0,24:R}", fromParse);
// The output is:
// Double value from literal: -4.42330604244772E-305
// Double value from variable: -4.42330604244772E-305
// Double value from Parse method: -4.42330604244772E-305
let value = -4.42330604244772E-305
let fromLiteral = -4.42330604244772E-305
let fromVariable = value
let fromParse = Double.Parse "-4.42330604244772E-305"
printfn $"Double value from literal: {fromLiteral,29:R}"
printfn $"Double value from variable: {fromVariable,28:R}"
printfn $"Double value from Parse method: {fromParse,24:R}"
// On 32-bit versions of the .NET Framework, the output is:
// Double value from literal: -4.42330604244772E-305
// Double value from variable: -4.42330604244772E-305
// Double value from Parse method: -4.42330604244772E-305
//
// On other versions of the .NET Framework, the output is:
// Double value from literal: -4.4233060424477198E-305
// Double value from variable: -4.4233060424477198E-305
// Double value from Parse method: -4.42330604244772E-305
Dim value As Double = -4.4233060424477198E-305
Dim fromLiteral As Double = -4.4233060424477198E-305
Dim fromVariable As Double = value
Dim fromParse As Double = Double.Parse("-4.42330604244772E-305")
Console.WriteLine("Double value from literal: {0,29:R}", fromLiteral)
Console.WriteLine("Double value from variable: {0,28:R}", fromVariable)
Console.WriteLine("Double value from Parse method: {0,24:R}", fromParse)
' The output is:
' Double value from literal: -4.42330604244772E-305
' Double value from variable: -4.42330604244772E-305
' Double value from Parse method: -4.42330604244772E-305
Test för likhet
För att betraktas som lika måste två Double 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å Double-värden, ofta oväntade resultat. Detta framgår tydligt i följande exempel, där två till synes lika Double värden visar sig vara ojämlika eftersom den första har 15 siffror med precision, medan den andra har 17.
using System;
public class Example
{
public static void Main()
{
double value1 = .333333333333333;
double value2 = 1.0/3;
Console.WriteLine($"{value1} = {value2}: {value1.Equals(value2)}");
}
}
// The example displays the following output:
// 0.333333333333333 = 0.33333333333333331: False
open System
let value1 = 0.333333333333333
let value2 = 1. / 3.
printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
// The example displays the following output:
// 0.333333333333333 = 0.33333333333333331: False
Module Example1
Public Sub Run()
Dim value1 As Double = 0.333333333333333
Dim value2 As Double = 1 / 3
Console.WriteLine("{0} = {1}: {2}", value1, value2, value1.Equals(value2))
End Sub
End Module
' The example displays the following output:
' 0.333333333333333 = 0.33333333333333331: False
I fall där en förlust av precision sannolikt kommer att påverka resultatet av en jämförelse kan du använda något av följande alternativ till 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.
double value1 = .333333333333333; double value2 = 1.0 / 3; int precision = 7; value1 = Math.Round(value1, precision); value2 = Math.Round(value2, precision); Console.WriteLine($"{value1} = {value2}: {value1.Equals(value2)}"); // The example displays the following output: // 0.3333333 = 0.3333333: Trueopen System let v1 = 0.333333333333333 let v2 = 1. / 3. let precision = 7 let value1 = Math.Round(v1, precision) let value2 = Math.Round(v2, precision) printfn $"{value1:R} = {value2:R}: {value1.Equals value2}" // The example displays the following output: // 0.3333333 = 0.3333333: TrueModule Example3 Public Sub Run() Dim value1 As Double = 0.333333333333333 Dim value2 As Double = 1 / 3 Dim precision As Integer = 7 value1 = Math.Round(value1, precision) value2 = Math.Round(value2, precision) Console.WriteLine("{0} = {1}: {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 snarare än likhet. Detta kräver att du definierar antingen ett absolut belopp med vilket de två värdena kan skilja sig men fortfarande vara lika med, eller att du definierar ett relativt belopp med vilket det mindre värdet kan avvika från det större värdet.
Varning
Double.Epsilon används ibland som ett absolut mått på avståndet mellan två Double värden vid likhetstestning. Dock mäter Double.Epsilon det minsta möjliga värde som kan läggas till en Double, eller subtraheras från en Double, vars värde är noll. För de flesta positiva och negativa Double värden är värdet Double.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. Metoden dividerar medMath.Max(value1, value2)så att jämförelsen är relativ till det större av de två värdena (i fråga om storlek), vilket sätter resultatet i rätt ordningsföljd. OmMath.Maxreturnerar noll (vilket inträffar när ett värde är noll och det andra är negativt) återgår metoden tillMath.Min(value1, value2)att använda värdet som inte är noll som divisor. Det kontrasterar också resultatet av anrop tillIsApproximatelyEqualmetoden och Equals(Double) metoden.using System; public class Example3 { public static void Main() { double one1 = .1 * 10; double one2 = 0; for (int ctr = 1; ctr <= 10; ctr++) one2 += .1; Console.WriteLine($"{one1} = {one2}: {one1.Equals(one2)}"); Console.WriteLine($"{one1} is approximately equal to {one2}: {IsApproximatelyEqual(one1, one2, .000000001)}"); } static bool IsApproximatelyEqual(double value1, double value2, double 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: // 1 = 0.99999999999999989: False // 1 is approximately equal to 0.99999999999999989: Trueopen System let isApproximatelyEqual (value1: double) (value2: double) (epsilon: double) = // If they are equal anyway, just return True. if value1.Equals value2 then true else // Handle NaN, Infinity. if Double.IsInfinity value1 || Double.IsNaN value1 then value1.Equals value2 elif Double.IsInfinity value2 || Double.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.1 * 10. let mutable one2 = 0. for _ = 1 to 10 do one2 <- one2 + 0.1 printfn $"{one1:R} = {one2:R}: {one1.Equals one2}" printfn $"{one1:R} is approximately equal to {one2:R}: {isApproximatelyEqual one1 one2 0.000000001}" // The example displays the following output: // 1 = 0.99999999999999989: False // 1 is approximately equal to 0.99999999999999989: TrueModule Example4 Public Sub Run() Dim one1 As Double = 0.1 * 10 Dim one2 As Double = 0 For ctr As Integer = 1 To 10 one2 += 0.1 Next Console.WriteLine("{0} = {1}: {2}", one1, one2, one1.Equals(one2)) Console.WriteLine("{0} is approximately equal to {1}: {2}", one1, one2, IsApproximatelyEqual(one1, one2, 0.000000001)) End Sub Function IsApproximatelyEqual(value1 As Double, value2 As Double, epsilon As Double) As Boolean ' If they are equal anyway, just return True. If value1.Equals(value2) Then Return True ' Handle NaN, Infinity. If Double.IsInfinity(value1) Or Double.IsNaN(value1) Then Return value1.Equals(value2) ElseIf Double.IsInfinity(value2) Or Double.IsNaN(value2) Then Return value1.Equals(value2) End If ' Handle zero to avoid division by zero Dim divisor As Double = 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 End Module ' The example displays the following output: ' 1 = 0.99999999999999989: False ' 1 is approximately equal to 0.99999999999999989: True
Flyttalsvärden och undantag
Till skillnad från åtgärder med integraltyper, som genererar en DivideByZeroException för division med noll eller ett OverflowException för spill i en kontrollerad kontext, utlöser åtgärder med flyttalsvärden inte undantag. I undantagsfall ä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å tal multipliceras, vilket visas i följande exempel.
using System; public class Example6 { public static void Main() { Double value1 = 1.1632875981534209e-225; Double value2 = 9.1642346778e-175; Double result = value1 * value2; Console.WriteLine($"{value1} * {value2} = {result}"); Console.WriteLine($"{result} = 0: {result.Equals(0.0)}"); } } // The example displays the following output: // 1.16328759815342E-225 * 9.1642346778E-175 = 0 // 0 = 0: Truelet value1 = 1.1632875981534209e-225 let value2 = 9.1642346778e-175 let result = value1 * value2 printfn $"{value1} * {value2} = {result}" printfn $"{result} = 0: {result.Equals 0.0}" // The example displays the following output: // 1.16328759815342E-225 * 9.1642346778E-175 = 0 // 0 = 0: TrueModule Example7 Public Sub Run() Dim value1 As Double = 1.1632875981534209E-225 Dim value2 As Double = 9.1642346778E-175 Dim result As Double = value1 * value2 Console.WriteLine("{0} * {1} = {2}", value1, value2, result) Console.WriteLine("{0} = 0: {1}", result, result.Equals(0.0)) End Sub End Module ' The example displays the following output: ' 1.16328759815342E-225 * 9.1642346778E-175 = 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 Double.MaxValue är PositiveInfinity, och resultatet av en operation som spiller över Double.MinValue är NegativeInfinity, som visas i följande exempel.
using System; public class Example7 { public static void Main() { Double value1 = 4.565e153; Double value2 = 6.9375e172; Double result = value1 * value2; Console.WriteLine($"PositiveInfinity: {Double.IsPositiveInfinity(result)}"); Console.WriteLine($"NegativeInfinity: {Double.IsNegativeInfinity(result)}{Environment.NewLine}"); value1 = -value1; result = value1 * value2; Console.WriteLine($"PositiveInfinity: {Double.IsPositiveInfinity(result)}"); Console.WriteLine($"NegativeInfinity: {Double.IsNegativeInfinity(result)}"); } } // The example displays the following output: // PositiveInfinity: True // NegativeInfinity: False // // PositiveInfinity: False // NegativeInfinity: Trueopen System let value1 = 4.565e153 let value2 = 6.9375e172 let result = value1 * value2 printfn $"PositiveInfinity: {Double.IsPositiveInfinity result}" printfn $"NegativeInfinity: {Double.IsNegativeInfinity result}\n" let value3 = - value1 let result2 = value2 * value3 printfn $"PositiveInfinity: {Double.IsPositiveInfinity result2}" printfn $"NegativeInfinity: {Double.IsNegativeInfinity result2}" // The example displays the following output: // PositiveInfinity: True // NegativeInfinity: False // // PositiveInfinity: False // NegativeInfinity: TrueModule Example8 Public Sub Run() Dim value1 As Double = 4.565E+153 Dim value2 As Double = 6.9375E+172 Dim result As Double = value1 * value2 Console.WriteLine("PositiveInfinity: {0}", Double.IsPositiveInfinity(result)) Console.WriteLine("NegativeInfinity: {0}", Double.IsNegativeInfinity(result)) Console.WriteLine() value1 = -value1 result = value1 * value2 Console.WriteLine("PositiveInfinity: {0}", Double.IsPositiveInfinity(result)) Console.WriteLine("NegativeInfinity: {0}", Double.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 indata. Om du till exempel anropar Math.Sqrt metoden med ett negativt värde returneras NaN, liksom att anropa Math.Acos metoden med ett värde som är större än ett eller mindre än negativt.
Alla åtgärder med ett argument vars värde är Double.NaN.
Typkonverteringar
Den Double strukturen definierar inte några explicita eller implicita konverteringsoperatorer. I stället implementeras konverteringar av kompilatorn.
Konvertering av värdet för en primitiv numerisk typ till en Double är en utvidgning och kräver därför inte en explicit typomvandlingsoperator eller ett anrop till en konverteringsmetod, om det inte uttryckligen krävs av en kompilator. C#-kompilatorn kräver till exempel en gjutningsoperator för konverteringar från Decimal till Double, medan Visual Basic-kompilatorn inte gör det. I följande exempel konverteras det lägsta eller högsta värdet för andra primitiva numeriska typer till en Double.
dynamic[] values = { Byte.MinValue, Byte.MaxValue, Decimal.MinValue,
Decimal.MaxValue, Int16.MinValue, Int16.MaxValue,
Int32.MinValue, Int32.MaxValue, Int64.MinValue,
Int64.MaxValue, SByte.MinValue, SByte.MaxValue,
Single.MinValue, Single.MaxValue, UInt16.MinValue,
UInt16.MaxValue, UInt32.MinValue, UInt32.MaxValue,
UInt64.MinValue, UInt64.MaxValue };
double dblValue;
foreach (dynamic value in values)
{
if (value.GetType() == typeof(decimal))
dblValue = (double)value;
else
dblValue = value;
Console.WriteLine($"{value} ({value.GetType().Name}) --> " +
$"{dblValue:R} ({dblValue.GetType().Name})");
}
// The example displays the following output:
// 0 (Byte) --> 0 (Double)
// 255 (Byte) --> 255 (Double)
// -79228162514264337593543950335 (Decimal) --> -7.9228162514264338E+28 (Double)
// 79228162514264337593543950335 (Decimal) --> 7.9228162514264338E+28 (Double)
// -32768 (Int16) --> -32768 (Double)
// 32767 (Int16) --> 32767 (Double)
// -2147483648 (Int32) --> -2147483648 (Double)
// 2147483647 (Int32) --> 2147483647 (Double)
// -9223372036854775808 (Int64) --> -9.2233720368547758E+18 (Double)
// 9223372036854775807 (Int64) --> 9.2233720368547758E+18 (Double)
// -128 (SByte) --> -128 (Double)
// 127 (SByte) --> 127 (Double)
// -3.402823E+38 (Single) --> -3.4028234663852886E+38 (Double)
// 3.402823E+38 (Single) --> 3.4028234663852886E+38 (Double)
// 0 (UInt16) --> 0 (Double)
// 65535 (UInt16) --> 65535 (Double)
// 0 (UInt32) --> 0 (Double)
// 4294967295 (UInt32) --> 4294967295 (Double)
// 0 (UInt64) --> 0 (Double)
// 18446744073709551615 (UInt64) --> 1.8446744073709552E+19 (Double)
open System
let values: obj[] =
[| Byte.MinValue; Byte.MaxValue; Decimal.MinValue
Decimal.MaxValue; Int16.MinValue; Int16.MaxValue
Int32.MinValue; Int32.MaxValue; Int64.MinValue
Int64.MaxValue; SByte.MinValue; SByte.MaxValue
Single.MinValue; Single.MaxValue; UInt16.MinValue
UInt16.MaxValue; UInt32.MinValue, UInt32.MaxValue
UInt64.MinValue; UInt64.MaxValue |]
for value in values do
let dblValue = value :?> double
printfn $"{value} ({value.GetType().Name}) --> {dblValue:R} ({dblValue.GetType().Name})"
// The example displays the following output:
// 0 (Byte) --> 0 (Double)
// 255 (Byte) --> 255 (Double)
// -79228162514264337593543950335 (Decimal) --> -7.9228162514264338E+28 (Double)
// 79228162514264337593543950335 (Decimal) --> 7.9228162514264338E+28 (Double)
// -32768 (Int16) --> -32768 (Double)
// 32767 (Int16) --> 32767 (Double)
// -2147483648 (Int32) --> -2147483648 (Double)
// 2147483647 (Int32) --> 2147483647 (Double)
// -9223372036854775808 (Int64) --> -9.2233720368547758E+18 (Double)
// 9223372036854775807 (Int64) --> 9.2233720368547758E+18 (Double)
// -128 (SByte) --> -128 (Double)
// 127 (SByte) --> 127 (Double)
// -3.402823E+38 (Single) --> -3.4028234663852886E+38 (Double)
// 3.402823E+38 (Single) --> 3.4028234663852886E+38 (Double)
// 0 (UInt16) --> 0 (Double)
// 65535 (UInt16) --> 65535 (Double)
// 0 (UInt32) --> 0 (Double)
// 4294967295 (UInt32) --> 4294967295 (Double)
// 0 (UInt64) --> 0 (Double)
// 18446744073709551615 (UInt64) --> 1.8446744073709552E+19 (Double)
Module Example5
Public Sub Run()
Dim values() As Object = {Byte.MinValue, Byte.MaxValue, Decimal.MinValue,
Decimal.MaxValue, Int16.MinValue, Int16.MaxValue,
Int32.MinValue, Int32.MaxValue, Int64.MinValue,
Int64.MaxValue, SByte.MinValue, SByte.MaxValue,
Single.MinValue, Single.MaxValue, UInt16.MinValue,
UInt16.MaxValue, UInt32.MinValue, UInt32.MaxValue,
UInt64.MinValue, UInt64.MaxValue}
Dim dblValue As Double
For Each value In values
dblValue = value
Console.WriteLine("{0} ({1}) --> {2:R} ({3})",
value, value.GetType().Name,
dblValue, dblValue.GetType().Name)
Next
End Sub
End Module
' The example displays the following output:
' 0 (Byte) --> 0 (Double)
' 255 (Byte) --> 255 (Double)
' -79228162514264337593543950335 (Decimal) --> -7.9228162514264338E+28 (Double)
' 79228162514264337593543950335 (Decimal) --> 7.9228162514264338E+28 (Double)
' -32768 (Int16) --> -32768 (Double)
' 32767 (Int16) --> 32767 (Double)
' -2147483648 (Int32) --> -2147483648 (Double)
' 2147483647 (Int32) --> 2147483647 (Double)
' -9223372036854775808 (Int64) --> -9.2233720368547758E+18 (Double)
' 9223372036854775807 (Int64) --> 9.2233720368547758E+18 (Double)
' -128 (SByte) --> -128 (Double)
' 127 (SByte) --> 127 (Double)
' -3.402823E+38 (Single) --> -3.4028234663852886E+38 (Double)
' 3.402823E+38 (Single) --> 3.4028234663852886E+38 (Double)
' 0 (UInt16) --> 0 (Double)
' 65535 (UInt16) --> 65535 (Double)
' 0 (UInt32) --> 0 (Double)
' 4294967295 (UInt32) --> 4294967295 (Double)
' 0 (UInt64) --> 0 (Double)
' 18446744073709551615 (UInt64) --> 1.8446744073709552E+19 (Double)
Dessutom konverteras Single värdena Single.NaN, Single.PositiveInfinity och Single.NegativeInfinity till Double.NaN, Double.PositiveInfinity och Double.NegativeInfinity.
Observera att konverteringen av värdet för vissa numeriska typer till ett Double 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, Int64och UInt64 värden till Double värden.
Konverteringen av ett Double värde till ett värde av någon annan primitiv numerisk datatyp är en begränsad konvertering och kräver en cast-operator (i C#), en konverteringsmetod (i Visual Basic) eller ett anrop till en Convert metod. 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. |
| Single |
Single.NegativeInfinity för negativa värden. Single.PositiveInfinity för positiva värden. |
Dessutom Double.NaN, Double.PositiveInfinity och Double.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 Singlekonverteras de till Single.NaN, Single.PositiveInfinityrespektive Single.NegativeInfinity.
En förlust av precision kan bero på att ett värde konverteras till en Double annan numerisk typ. Om du konverterar till någon av de integrerade typerna, som utdata från exemplet visar, går bråkkomponenten förlorad när värdet Double antingen avrundas (som i Visual Basic) eller trunkeras (som i C#). För konverteringar till Decimal och Single värden Double kanske värdet inte har någon exakt representation i måldatatypen.
I följande exempel konverteras några Double 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 modulen Kontrollerad ). 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 .
using System;
public class Example5
{
public static void Main()
{
Double[] values = { Double.MinValue, -67890.1234, -12345.6789,
12345.6789, 67890.1234, Double.MaxValue,
Double.NaN, Double.PositiveInfinity,
Double.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.");
}
try
{
Single sValue = (float)value;
Console.WriteLine($"{value} ({value.GetType().Name}) --> {sValue} ({sValue.GetType().Name})");
}
catch (OverflowException)
{
Console.WriteLine($"Unable to convert {value} to Single.");
}
Console.WriteLine();
}
}
}
}
// The example displays the following output for conversions performed
// in a checked context:
// Unable to convert -1.79769313486232E+308 to Int64.
// Unable to convert -1.79769313486232E+308 to UInt64.
// Unable to convert -1.79769313486232E+308 to Decimal.
// -1.79769313486232E+308 (Double) --> -Infinity (Single)
//
// -67890.1234 (Double) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
// Unable to convert -67890.1234 to UInt64.
// -67890.1234 (Double) --> -67890.1234 (Decimal)
// -67890.1234 (Double) --> -67890.13 (Single)
//
// -12345.6789 (Double) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
// Unable to convert -12345.6789 to UInt64.
// -12345.6789 (Double) --> -12345.6789 (Decimal)
// -12345.6789 (Double) --> -12345.68 (Single)
//
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (Int64)
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (UInt64)
// 12345.6789 (Double) --> 12345.6789 (Decimal)
// 12345.6789 (Double) --> 12345.68 (Single)
//
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (Int64)
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (UInt64)
// 67890.1234 (Double) --> 67890.1234 (Decimal)
// 67890.1234 (Double) --> 67890.13 (Single)
//
// Unable to convert 1.79769313486232E+308 to Int64.
// Unable to convert 1.79769313486232E+308 to UInt64.
// Unable to convert 1.79769313486232E+308 to Decimal.
// 1.79769313486232E+308 (Double) --> Infinity (Single)
//
// Unable to convert NaN to Int64.
// Unable to convert NaN to UInt64.
// Unable to convert NaN to Decimal.
// NaN (Double) --> NaN (Single)
//
// Unable to convert Infinity to Int64.
// Unable to convert Infinity to UInt64.
// Unable to convert Infinity to Decimal.
// Infinity (Double) --> Infinity (Single)
//
// Unable to convert -Infinity to Int64.
// Unable to convert -Infinity to UInt64.
// Unable to convert -Infinity to Decimal.
// -Infinity (Double) --> -Infinity (Single)
// The example displays the following output for conversions performed
// in an unchecked context:
// -1.79769313486232E+308 (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// -1.79769313486232E+308 (Double) --> 9223372036854775808 (0x8000000000000000) (UInt64)
// Unable to convert -1.79769313486232E+308 to Decimal.
// -1.79769313486232E+308 (Double) --> -Infinity (Single)
//
// -67890.1234 (Double) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
// -67890.1234 (Double) --> 18446744073709483726 (0xFFFFFFFFFFFEF6CE) (UInt64)
// -67890.1234 (Double) --> -67890.1234 (Decimal)
// -67890.1234 (Double) --> -67890.13 (Single)
//
// -12345.6789 (Double) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
// -12345.6789 (Double) --> 18446744073709539271 (0xFFFFFFFFFFFFCFC7) (UInt64)
// -12345.6789 (Double) --> -12345.6789 (Decimal)
// -12345.6789 (Double) --> -12345.68 (Single)
//
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (Int64)
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (UInt64)
// 12345.6789 (Double) --> 12345.6789 (Decimal)
// 12345.6789 (Double) --> 12345.68 (Single)
//
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (Int64)
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (UInt64)
// 67890.1234 (Double) --> 67890.1234 (Decimal)
// 67890.1234 (Double) --> 67890.13 (Single)
//
// 1.79769313486232E+308 (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// 1.79769313486232E+308 (Double) --> 0 (0x0000000000000000) (UInt64)
// Unable to convert 1.79769313486232E+308 to Decimal.
// 1.79769313486232E+308 (Double) --> Infinity (Single)
//
// NaN (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// NaN (Double) --> 0 (0x0000000000000000) (UInt64)
// Unable to convert NaN to Decimal.
// NaN (Double) --> NaN (Single)
//
// Infinity (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// Infinity (Double) --> 0 (0x0000000000000000) (UInt64)
// Unable to convert Infinity to Decimal.
// Infinity (Double) --> Infinity (Single)
//
// -Infinity (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// -Infinity (Double) --> 9223372036854775808 (0x8000000000000000) (UInt64)
// Unable to convert -Infinity to Decimal.
// -Infinity (Double) --> -Infinity (Single)
open System
open Checked
let values =
[| Double.MinValue; -67890.1234; -12345.6789
12345.6789; 67890.1234; Double.MaxValue
Double.NaN; Double.PositiveInfinity;
Double.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."
try
let sValue = float32 value
printfn $"{value} ({value.GetType().Name}) --> {sValue} ({sValue.GetType().Name})"
with :? OverflowException ->
printfn $"Unable to convert {value} to Single."
printfn ""
// The example displays the following output for conversions performed
// in a checked context:
// Unable to convert -1.79769313486232E+308 to Int64.
// Unable to convert -1.79769313486232E+308 to UInt64.
// Unable to convert -1.79769313486232E+308 to Decimal.
// -1.79769313486232E+308 (Double) --> -Infinity (Single)
//
// -67890.1234 (Double) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
// Unable to convert -67890.1234 to UInt64.
// -67890.1234 (Double) --> -67890.1234 (Decimal)
// -67890.1234 (Double) --> -67890.13 (Single)
//
// -12345.6789 (Double) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
// Unable to convert -12345.6789 to UInt64.
// -12345.6789 (Double) --> -12345.6789 (Decimal)
// -12345.6789 (Double) --> -12345.68 (Single)
//
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (Int64)
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (UInt64)
// 12345.6789 (Double) --> 12345.6789 (Decimal)
// 12345.6789 (Double) --> 12345.68 (Single)
//
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (Int64)
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (UInt64)
// 67890.1234 (Double) --> 67890.1234 (Decimal)
// 67890.1234 (Double) --> 67890.13 (Single)
//
// Unable to convert 1.79769313486232E+308 to Int64.
// Unable to convert 1.79769313486232E+308 to UInt64.
// Unable to convert 1.79769313486232E+308 to Decimal.
// 1.79769313486232E+308 (Double) --> Infinity (Single)
//
// Unable to convert NaN to Int64.
// Unable to convert NaN to UInt64.
// Unable to convert NaN to Decimal.
// NaN (Double) --> NaN (Single)
//
// Unable to convert Infinity to Int64.
// Unable to convert Infinity to UInt64.
// Unable to convert Infinity to Decimal.
// Infinity (Double) --> Infinity (Single)
//
// Unable to convert -Infinity to Int64.
// Unable to convert -Infinity to UInt64.
// Unable to convert -Infinity to Decimal.
// -Infinity (Double) --> -Infinity (Single)
// The example displays the following output for conversions performed
// in an unchecked context:
// -1.79769313486232E+308 (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// -1.79769313486232E+308 (Double) --> 9223372036854775808 (0x8000000000000000) (UInt64)
// Unable to convert -1.79769313486232E+308 to Decimal.
// -1.79769313486232E+308 (Double) --> -Infinity (Single)
//
// -67890.1234 (Double) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
// -67890.1234 (Double) --> 18446744073709483726 (0xFFFFFFFFFFFEF6CE) (UInt64)
// -67890.1234 (Double) --> -67890.1234 (Decimal)
// -67890.1234 (Double) --> -67890.13 (Single)
//
// -12345.6789 (Double) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
// -12345.6789 (Double) --> 18446744073709539271 (0xFFFFFFFFFFFFCFC7) (UInt64)
// -12345.6789 (Double) --> -12345.6789 (Decimal)
// -12345.6789 (Double) --> -12345.68 (Single)
//
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (Int64)
// 12345.6789 (Double) --> 12345 (0x0000000000003039) (UInt64)
// 12345.6789 (Double) --> 12345.6789 (Decimal)
// 12345.6789 (Double) --> 12345.68 (Single)
//
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (Int64)
// 67890.1234 (Double) --> 67890 (0x0000000000010932) (UInt64)
// 67890.1234 (Double) --> 67890.1234 (Decimal)
// 67890.1234 (Double) --> 67890.13 (Single)
//
// 1.79769313486232E+308 (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// 1.79769313486232E+308 (Double) --> 0 (0x0000000000000000) (UInt64)
// Unable to convert 1.79769313486232E+308 to Decimal.
// 1.79769313486232E+308 (Double) --> Infinity (Single)
//
// NaN (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// NaN (Double) --> 0 (0x0000000000000000) (UInt64)
// Unable to convert NaN to Decimal.
// NaN (Double) --> NaN (Single)
//
// Infinity (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// Infinity (Double) --> 0 (0x0000000000000000) (UInt64)
// Unable to convert Infinity to Decimal.
// Infinity (Double) --> Infinity (Single)
//
// -Infinity (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
// -Infinity (Double) --> 9223372036854775808 (0x8000000000000000) (UInt64)
// Unable to convert -Infinity to Decimal.
// -Infinity (Double) --> -Infinity (Single)
Module Example6
Public Sub Run()
Dim values() As Double = {Double.MinValue, -67890.1234, -12345.6789,
12345.6789, 67890.1234, Double.MaxValue,
Double.NaN, Double.PositiveInfinity,
Double.NegativeInfinity}
For Each value In values
Try
Dim lValue As Int64 = 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
Try
Dim sValue As Single = CSng(value)
Console.WriteLine("{0} ({1}) --> {2} ({3})",
value, value.GetType().Name,
sValue, sValue.GetType().Name)
Catch e As OverflowException
Console.WriteLine("Unable to convert {0} to Single.", value)
End Try
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output for conversions performed
' in a checked context:
' Unable to convert -1.79769313486232E+308 to Int64.
' Unable to convert -1.79769313486232E+308 to UInt64.
' Unable to convert -1.79769313486232E+308 to Decimal.
' -1.79769313486232E+308 (Double) --> -Infinity (Single)
'
' -67890.1234 (Double) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
' Unable to convert -67890.1234 to UInt64.
' -67890.1234 (Double) --> -67890.1234 (Decimal)
' -67890.1234 (Double) --> -67890.13 (Single)
'
' -12345.6789 (Double) --> -12346 (0xFFFFFFFFFFFFCFC6) (Int64)
' Unable to convert -12345.6789 to UInt64.
' -12345.6789 (Double) --> -12345.6789 (Decimal)
' -12345.6789 (Double) --> -12345.68 (Single)
'
' 12345.6789 (Double) --> 12346 (0x000000000000303A) (Int64)
' 12345.6789 (Double) --> 12346 (0x000000000000303A) (UInt64)
' 12345.6789 (Double) --> 12345.6789 (Decimal)
' 12345.6789 (Double) --> 12345.68 (Single)
'
' 67890.1234 (Double) --> 67890 (0x0000000000010932) (Int64)
' 67890.1234 (Double) --> 67890 (0x0000000000010932) (UInt64)
' 67890.1234 (Double) --> 67890.1234 (Decimal)
' 67890.1234 (Double) --> 67890.13 (Single)
'
' Unable to convert 1.79769313486232E+308 to Int64.
' Unable to convert 1.79769313486232E+308 to UInt64.
' Unable to convert 1.79769313486232E+308 to Decimal.
' 1.79769313486232E+308 (Double) --> Infinity (Single)
'
' Unable to convert NaN to Int64.
' Unable to convert NaN to UInt64.
' Unable to convert NaN to Decimal.
' NaN (Double) --> NaN (Single)
'
' Unable to convert Infinity to Int64.
' Unable to convert Infinity to UInt64.
' Unable to convert Infinity to Decimal.
' Infinity (Double) --> Infinity (Single)
'
' Unable to convert -Infinity to Int64.
' Unable to convert -Infinity to UInt64.
' Unable to convert -Infinity to Decimal.
' -Infinity (Double) --> -Infinity (Single)
' The example displays the following output for conversions performed
' in an unchecked context:
' -1.79769313486232E+308 (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
' -1.79769313486232E+308 (Double) --> 9223372036854775808 (0x8000000000000000) (UInt64)
' Unable to convert -1.79769313486232E+308 to Decimal.
' -1.79769313486232E+308 (Double) --> -Infinity (Single)
'
' -67890.1234 (Double) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
' -67890.1234 (Double) --> 18446744073709483726 (0xFFFFFFFFFFFEF6CE) (UInt64)
' -67890.1234 (Double) --> -67890.1234 (Decimal)
' -67890.1234 (Double) --> -67890.13 (Single)
'
' -12345.6789 (Double) --> -12346 (0xFFFFFFFFFFFFCFC6) (Int64)
' -12345.6789 (Double) --> 18446744073709539270 (0xFFFFFFFFFFFFCFC6) (UInt64)
' -12345.6789 (Double) --> -12345.6789 (Decimal)
' -12345.6789 (Double) --> -12345.68 (Single)
'
' 12345.6789 (Double) --> 12346 (0x000000000000303A) (Int64)
' 12345.6789 (Double) --> 12346 (0x000000000000303A) (UInt64)
' 12345.6789 (Double) --> 12345.6789 (Decimal)
' 12345.6789 (Double) --> 12345.68 (Single)
'
' 67890.1234 (Double) --> 67890 (0x0000000000010932) (Int64)
' 67890.1234 (Double) --> 67890 (0x0000000000010932) (UInt64)
' 67890.1234 (Double) --> 67890.1234 (Decimal)
' 67890.1234 (Double) --> 67890.13 (Single)
'
' 1.79769313486232E+308 (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
' 1.79769313486232E+308 (Double) --> 0 (0x0000000000000000) (UInt64)
' Unable to convert 1.79769313486232E+308 to Decimal.
' 1.79769313486232E+308 (Double) --> Infinity (Single)
'
' NaN (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
' NaN (Double) --> 0 (0x0000000000000000) (UInt64)
' Unable to convert NaN to Decimal.
' NaN (Double) --> NaN (Single)
'
' Infinity (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
' Infinity (Double) --> 0 (0x0000000000000000) (UInt64)
' Unable to convert Infinity to Decimal.
' Infinity (Double) --> Infinity (Single)
'
' -Infinity (Double) --> -9223372036854775808 (0x8000000000000000) (Int64)
' -Infinity (Double) --> 9223372036854775808 (0x8000000000000000) (UInt64)
' Unable to convert -Infinity to Decimal.
' -Infinity (Double) --> -Infinity (Single)
Mer information om konvertering av numeriska typer finns i Type Conversion in .NET och Type Conversion Tables.
Flyttalsfunktionalitet
Strukturen Double och relaterade typer tillhandahåller metoder för att utföra åtgärder inom följande områden:
Jämförelse av värden. Du kan anropa Equals metoden för att avgöra om två Double värden är lika med eller CompareTo metoden för att fastställa relationen mellan två värden.
Den Double-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. Om en av operanderna är en annan numerisk typ än en Doublekonverteras den till en Double innan jämförelsen utförs.
Varning
På grund av skillnader i precision kan två Double värden som du förväntar dig vara lika med visa sig vara ojämlika, vilket påverkar resultatet av jämförelsen. Information om hur du jämför två Double värden finns i avsnittet Testa för likhet .
Du kan också anropa IsNaNmetoderna , IsInfinity, IsPositiveInfinityoch IsNegativeInfinity för att testa dessa specialvärden.
Matematiska operationer. Vanliga aritmetiska åtgärder, till exempel addition, subtraktion, multiplikation och division, implementeras av språkkompilatorer och CIL-instruktioner (Common Intermediate Language) snarare än med Double metoder. Om en av operanderna i en matematisk åtgärd är en annan numerisk typ än en Doublekonverteras den till en Double innan åtgärden utförs. Resultatet av åtgärden är också ett Double värde.
Andra matematiska åtgärder kan utföras genom att anropa metoderna
static(Sharedi Visual Basic) i klassen System.Math. Den innehåller 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.LogDu kan också hantera de enskilda bitarna i ett Double värde. Metoden BitConverter.DoubleToInt64Bits bevarar ett Double värdes bitmönster i ett 64-bitars heltal. BitConverter.GetBytes(Double)-metoden returnerar sitt bitmönster i en bytearray.
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 Double värde genom att Math.Round anropa metoden.
B0 formatering A1 Du kan konvertera ett Double 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 Double värde genom att anropa antingen Parse -metoden eller TryParse . Om parsningsåtgärden Parse misslyckas utlöser metoden ett undantag, medan TryParse metoden returnerar
false.Typkonvertering. Strukturen Double 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 till Double värden. Konvertering av ett värde av valfri numerisk standardtyp till en Double är en bredare konvertering och kräver inte användaren av en gjutningsoperator eller konverteringsmetod.
Konvertering av Int64 värden och Single värden kan dock innebära en förlust av precision. I följande tabell visas skillnaderna i precision för var och en av dessa typer:
Type Högsta precision Intern precision Double 15 17 Int64 19 decimaler 19 decimaler Single 7 decimaler 9 decimaler 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 divisioner olikvärdiga eftersom ett av värdena är ett flyttal med enkel precision som konverterats till en Double.
using System; public class Example13 { public static void Main() { Double value = .1; Double result1 = value * 10; Double result2 = 0; for (int ctr = 1; ctr <= 10; ctr++) result2 += value; Console.WriteLine($".1 * 10: {result1:R}"); Console.WriteLine($".1 Added 10 times: {result2:R}"); } } // The example displays the following output: // .1 * 10: 1 // .1 Added 10 times: 0.99999999999999989let value = 0.1 let result1 = value * 10. let mutable result2 = 0. for i = 1 to 10 do result2 <- result2 + value printfn $".1 * 10: {result1:R}" printfn $".1 Added 10 times: {result2:R}" // The example displays the following output: // .1 * 10: 1 // .1 Added 10 times: 0.99999999999999989Module Example14 Public Sub Run() Dim value As Double = 0.1 Dim result1 As Double = value * 10 Dim result2 As Double For ctr As Integer = 1 To 10 result2 += value Next Console.WriteLine(".1 * 10: {0:R}", result1) Console.WriteLine(".1 Added 10 times: {0:R}", result2) End Sub End Module ' The example displays the following output: ' .1 * 10: 1 ' .1 Added 10 times: 0.99999999999999989
Fält
| Name | Description |
|---|---|
| E |
Representerar den naturliga logaritmiska basen, som anges av konstanten, e. |
| Epsilon |
Representerar det minsta positiva Double 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 en Double. Det här fältet är konstant. |
| MinValue |
Representerar det minsta möjliga värdet för en Double. Det här fältet är konstant. |
| NaN |
Representerar ett värde som inte är 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(Double) |
Beräknar det absoluta värdet. |
| Acos(Double) |
Beräknar arc-cosinus för ett värde. |
| Acosh(Double) |
Beräknar hyperbolisk arc-cosinus för ett värde. |
| AcosPi(Double) |
Beräknar arc-cosinus för ett värde och delar resultatet |
| Asin(Double) |
Beräknar arc-sinus för ett värde. |
| Asinh(Double) |
Beräknar hyperbolisk arc-sinus för ett värde. |
| AsinPi(Double) |
Beräknar arc-sinus för ett värde och delar resultatet |
| Atan(Double) |
Beräknar arc-tangenten för ett värde. |
| Atan2(Double, Double) |
Beräknar arc-tangenten för kvoten för två värden. |
| Atan2Pi(Double, Double) |
Beräknar arc-tangenten för kvoten för två värden och delar resultatet |
| Atanh(Double) |
Beräknar hyperbolisk arc-tangens för ett värde. |
| AtanPi(Double) |
Beräknar arc-tangenten för ett värde och delar resultatet med pi. |
| BitDecrement(Double) |
Returnerar det största värdet som jämför mindre än ett angivet värde. |
| BitIncrement(Double) |
Returnerar det minsta värde som jämför större än ett angivet värde. |
| Cbrt(Double) |
Beräknar kubroten för ett värde. |
| Ceiling(Double) |
Beräknar taket för ett värde. |
| Clamp(Double, Double, Double) |
Klämmer fast ett värde till ett inkluderande lägsta och högsta värde. |
| ClampNative(Double, Double, Double) |
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(Double) |
Jämför den här instansen med ett angivet flyttal med dubbel 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 dubbel precision. |
| 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. |
| ConvertToInteger<TInteger>(Double) |
Konverterar ett värde till en angiven heltalstyp med mättnad vid spill |
| ConvertToIntegerNative<TInteger>(Double) |
Konverterar ett värde till en angiven heltalstyp med plattformsspecifikt beteende vid spill. |
| CopySign(Double, Double) |
Kopierar tecknet för ett värde till tecknet för ett annat värde. |
| Cos(Double) |
Beräknar cosininen för ett värde. |
| Cosh(Double) |
Beräknar hyperbolisk cosiné för ett värde. |
| CosPi(Double) |
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(Double) |
Konverterar ett givet värde från grader till radianer. |
| Equals(Double) |
Returnerar ett värde som anger om den här instansen och ett angivet Double objekt representerar samma värde. |
| Equals(Object) |
Returnerar ett värde som anger om den här instansen är lika med ett angivet objekt. |
| Exp(Double) |
Beräkningar som har genererats |
| Exp10(Double) |
Beräkningar som har genererats |
| Exp10M1(Double) |
Beräkningar som genereras |
| Exp2(Double) |
Beräkningar som har genererats |
| Exp2M1(Double) |
Beräkningar som genereras |
| ExpM1(Double) |
Beräkningar som genereras |
| Floor(Double) |
Beräknar golvet i ett värde. |
| FusedMultiplyAdd(Double, Double, Double) |
Beräknar det sammansvetsade multiplikationstillägget med tre värden. |
| GetHashCode() |
Returnerar hash-koden för den här instansen. |
| GetTypeCode() | |
| Hypot(Double, Double) |
Beräknar hypotenuse med två värden som representerar längden på de kortare sidorna i en högervinklad triangel. |
| Ieee754Remainder(Double, Double) |
Beräknar resten av två värden enligt IEEE 754. |
| ILogB(Double) |
Beräknar heltalsloggaritmen för ett värde. |
| IsEvenInteger(Double) |
Avgör om ett värde representerar ett jämnt heltal. |
| IsFinite(Double) |
Avgör om det angivna värdet är begränsat (noll, subnormalt eller normalt). |
| IsInfinity(Double) |
Returnerar ett värde som anger om det angivna talet utvärderas till negativ eller positiv oändlighet. |
| IsInteger(Double) |
Avgör om ett värde representerar ett integralvärde. |
| IsNaN(Double) |
Returnerar ett värde som anger om det angivna värdet inte är ett tal (NaN). |
| IsNegative(Double) |
Avgör om det angivna värdet är negativt. |
| IsNegativeInfinity(Double) |
Returnerar ett värde som anger om det angivna talet utvärderas till negativ oändlighet. |
| IsNormal(Double) |
Avgör om det angivna värdet är normalt. |
| IsOddInteger(Double) |
Avgör om ett värde representerar ett udda integraltal. |
| IsPositive(Double) |
Avgör om ett värde är positivt. |
| IsPositiveInfinity(Double) |
Returnerar ett värde som anger om det angivna talet utvärderas till positiv oändlighet. |
| IsPow2(Double) |
Avgör om ett värde är en kraft på två. |
| IsRealNumber(Double) |
Avgör om ett värde representerar ett verkligt tal. |
| IsSubnormal(Double) |
Avgör om det angivna värdet är subnormalt. |
| Lerp(Double, Double, Double) |
Utför en linjär interpolering mellan två värden baserat på den angivna vikten. |
| Log(Double, Double) |
Beräknar logaritmen för ett värde i den angivna basen. |
| Log(Double) |
Beräknar det naturliga ( |
| Log10(Double) |
Beräknar base-10-logaritmen för ett värde. |
| Log10P1(Double) |
Beräknar logaritmen base-10 för ett värde plus ett. |
| Log2(Double) |
Beräknar log2 för ett värde. |
| Log2P1(Double) |
Beräknar base-2-logaritmen för ett värde plus ett. |
| LogP1(Double) |
Beräknar den naturliga ( |
| Max(Double, Double) |
Jämför två värden med beräkning som är större. |
| MaxMagnitude(Double, Double) |
Jämför två värden med beräkning som är större. |
| MaxMagnitudeNumber(Double, Double) |
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(Double, Double) |
Jämför två värden med beräkning som är större med plattformsspecifikt beteende för |
| MaxNumber(Double, Double) |
Jämför två värden med beräkning som är större och returnerar det andra värdet om en indata är |
| Min(Double, Double) |
Jämför två värden med beräkning som är mindre. |
| MinMagnitude(Double, Double) |
Jämför två värden med beräkning som är mindre. |
| MinMagnitudeNumber(Double, Double) |
Jämför två värden med beräkning som har mindre storlek och returnerar det andra värdet om en indata är |
| MinNative(Double, Double) |
Jämför två värden med beräkning som är mindre med plattformsspecifikt beteende för |
| MinNumber(Double, Double) |
Jämför två värden med beräkning som är mindre och returnerar det andra värdet om en indata är |
| MultiplyAddEstimate(Double, Double, Double) |
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 ett kulturspecifikt format till motsvarande flyttalsnummer med dubbel precision. |
| Parse(String, IFormatProvider) |
Konverterar strängrepresentationen av ett tal i ett angivet kulturspecifikt format till motsvarande flyttalsnummer med dubbel precision. |
| Parse(String, NumberStyles, IFormatProvider) |
Konverterar strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till motsvarande flyttalsnummer med dubbel precision. |
| Parse(String, NumberStyles) |
Konverterar strängrepresentationen av ett tal i ett angivet format till motsvarande flyttalsnummer med dubbel precision. |
| Parse(String) |
Konverterar strängrepresentationen av ett tal till motsvarande flyttalsnummer med dubbel precision. |
| Pow(Double, Double) |
Beräknar ett värde som har upphöjts till en viss effekt. |
| RadiansToDegrees(Double) |
Konverterar ett givet värde från radianer till grader. |
| ReciprocalEstimate(Double) |
Beräknar en uppskattning av ett värdes ömsesidiga värde. |
| ReciprocalSqrtEstimate(Double) |
Beräknar en uppskattning av den ömsesidiga kvadratroten för ett värde. |
| RootN(Double, Int32) |
Beräknar den n:e roten för ett värde. |
| Round(Double, Int32, MidpointRounding) |
Avrundar ett värde till ett angivet antal bråksiffror med standard avrundningsläget (ToEven). |
| Round(Double, Int32) |
Avrundar ett värde till ett angivet antal bråksiffror med standard avrundningsläget (ToEven). |
| Round(Double, MidpointRounding) |
Avrundar ett värde till närmaste heltal med det angivna avrundningsläget. |
| Round(Double) |
Avrundar ett värde till närmaste heltal med standard avrundningsläget (ToEven). |
| ScaleB(Double, Int32) |
Beräknar produkten av ett värde och dess basradix upphöjt till den angivna kraften. |
| Sign(Double) |
Beräknar tecknet för ett värde. |
| Sin(Double) |
Beräknar sinus för ett värde. |
| SinCos(Double) |
Beräknar sinus och cosinus för ett värde. |
| SinCosPi(Double) |
Beräknar sinus och cosinus för ett värde. |
| Sinh(Double) |
Beräknar hyperbolisk sinus för ett värde. |
| SinPi(Double) |
Beräknar sinus för ett värde som har multiplicerats |
| Sqrt(Double) |
Beräknar kvadratroten för ett värde. |
| Tan(Double) |
Beräknar tangensen för ett värde. |
| Tanh(Double) |
Beräknar hyperbolisk tangens för ett värde. |
| TanPi(Double) |
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(Double) |
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 dubbla instansen till det angivna intervallet med tecken. |
| TryParse(ReadOnlySpan<Byte>, Double) |
Försöker konvertera ett UTF-8-teckensintervall som innehåller strängrepresentationen av ett tal till motsvarande flyttal med dubbel precision. |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double) |
Försöker parsa ett intervall med UTF-8 tecken till ett värde. |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double) |
Försöker parsa ett intervall med UTF-8 tecken till ett värde. |
| TryParse(ReadOnlySpan<Char>, Double) |
Konverterar spännviddsrepresentationen av ett tal i ett angivet format och kulturspecifikt format till motsvarande flyttalsnummer med dubbel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, Double) |
Försöker parsa ett teckenintervall till ett värde. |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double) |
Konverterar ett teckenintervall som innehåller strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till dess motsvarighet för flyttal med dubbel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
| TryParse(String, Double) |
Konverterar strängrepresentationen av ett tal till motsvarande flyttalsnummer med dubbel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
| TryParse(String, IFormatProvider, Double) |
Försöker parsa en sträng till ett värde. |
| TryParse(String, NumberStyles, IFormatProvider, Double) |
Konverterar strängrepresentationen av ett tal i ett angivet format och kulturspecifikt format till motsvarande flyttalsnummer med dubbel precision. Ett returvärde anger om konverteringen lyckades eller misslyckades. |
Operatorer
| Name | Description |
|---|---|
| Equality(Double, Double) |
Returnerar ett värde som anger om två angivna Double värden är lika med. |
| GreaterThan(Double, Double) |
Returnerar ett värde som anger om ett angivet Double värde är större än ett annat angivet Double värde. |
| GreaterThanOrEqual(Double, Double) |
Returnerar ett värde som anger om ett angivet Double värde är större än eller lika med ett annat angivet Double värde. |
| Inequality(Double, Double) |
Returnerar ett värde som anger om två angivna Double värden inte är lika med. |
| LessThan(Double, Double) |
Returnerar ett värde som anger om ett angivet Double värde är mindre än ett annat angivet Double värde. |
| LessThanOrEqual(Double, Double) |
Returnerar ett värde som anger om ett angivet Double värde är mindre än eller lika med ett annat angivet Double värde. |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| IAdditionOperators<Double,Double,Double>.Addition(Double, Double) |
Lägger till två värden tillsammans för att beräkna summan. |
| IAdditiveIdentity<Double,Double>.AdditiveIdentity |
Hämtar den aktuella typens additiva identitet. |
| IBinaryNumber<Double>.AllBitsSet |
Hämtar en instans av den binära typen där alla bitar anges. |
| IBitwiseOperators<Double,Double,Double>.BitwiseAnd(Double, Double) |
Beräknar bitvis och av två värden. |
| IBitwiseOperators<Double,Double,Double>.BitwiseOr(Double, Double) |
Beräknar bitvis eller två värden. |
| IBitwiseOperators<Double,Double,Double>.ExclusiveOr(Double, Double) |
Beräknar uteslutande eller av två värden. |
| IBitwiseOperators<Double,Double,Double>.OnesComplement(Double) |
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<Double>.Decrement(Double) |
Minskar ett värde. |
| IDivisionOperators<Double,Double,Double>.Division(Double, Double) |
Delar upp ett värde med ett annat för att beräkna deras kvot. |
| IFloatingPoint<Double>.GetExponentByteCount() |
Hämtar antalet byte som ska skrivas som en del av TryWriteExponentLittleEndian(Span<Byte>, Int32). |
| IFloatingPoint<Double>.GetExponentShortestBitLength() |
Hämtar längden, i bitar, på de kortaste tvås komplementrepresentation av den aktuella exponenten. |
| IFloatingPoint<Double>.GetSignificandBitLength() |
Hämtar längden, i bitar, på den aktuella significanden. |
| IFloatingPoint<Double>.GetSignificandByteCount() |
Hämtar antalet byte som ska skrivas som en del av TryWriteSignificandLittleEndian(Span<Byte>, Int32). |
| IFloatingPoint<Double>.TryWriteExponentBigEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella exponenten, i stor endianskt format, till ett givet spann. |
| IFloatingPoint<Double>.TryWriteExponentLittleEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella exponenten, i lite endianskt format, till ett givet spann. |
| IFloatingPoint<Double>.TryWriteSignificandBigEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella significand, i big-endian format, till ett visst spann. |
| IFloatingPoint<Double>.TryWriteSignificandLittleEndian(Span<Byte>, Int32) |
Försöker skriva den aktuella significand, i lite-endian format, till ett givet spann. |
| IFloatingPointConstants<Double>.E |
Hämtar den matematiska konstanten |
| IFloatingPointConstants<Double>.Pi |
Hämtar den matematiska konstanten |
| IFloatingPointConstants<Double>.Tau |
Hämtar den matematiska konstanten |
| IFloatingPointIeee754<Double>.Epsilon |
Hämtar det minsta värdet som kan läggas till |
| IFloatingPointIeee754<Double>.NaN |
Hämtar ett värde som representerar |
| IFloatingPointIeee754<Double>.NegativeInfinity |
Hämtar ett värde som representerar negativt |
| IFloatingPointIeee754<Double>.NegativeZero |
Hämtar ett värde som representerar negativt |
| IFloatingPointIeee754<Double>.PositiveInfinity |
Hämtar ett värde som representerar positivt |
| IIncrementOperators<Double>.Increment(Double) |
Ökar ett värde. |
| IMinMaxValue<Double>.MaxValue |
Hämtar det maximala värdet för den aktuella typen. |
| IMinMaxValue<Double>.MinValue |
Hämtar det lägsta värdet för den aktuella typen. |
| IModulusOperators<Double,Double,Double>.Modulus(Double, Double) |
Delar upp två värden för att beräkna deras modulus eller rest. |
| IMultiplicativeIdentity<Double,Double>.MultiplicativeIdentity |
Hämtar den multiplicativa identiteten för den aktuella typen. |
| IMultiplyOperators<Double,Double,Double>.Multiply(Double, Double) |
Multiplicerar två värden tillsammans för att beräkna produkten. |
| INumberBase<Double>.IsCanonical(Double) |
Avgör om ett värde finns i dess kanoniska representation. |
| INumberBase<Double>.IsComplexNumber(Double) |
Avgör om ett värde representerar ett komplext tal. |
| INumberBase<Double>.IsImaginaryNumber(Double) |
Avgör om ett värde representerar ett rent imaginärt tal. |
| INumberBase<Double>.IsZero(Double) |
Avgör om ett värde är noll. |
| INumberBase<Double>.One |
Hämtar värdet |
| INumberBase<Double>.Radix |
Hämtar radixet, eller basen, för typen. |
| INumberBase<Double>.TryConvertFromChecked<TOther>(TOther, Double) |
Representerar ett flyttal med dubbel precision. |
| INumberBase<Double>.TryConvertFromSaturating<TOther>(TOther, Double) |
Representerar ett flyttal med dubbel precision. |
| INumberBase<Double>.TryConvertFromTruncating<TOther>(TOther, Double) |
Representerar ett flyttal med dubbel precision. |
| INumberBase<Double>.TryConvertToChecked<TOther>(Double, 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<Double>.TryConvertToSaturating<TOther>(Double, 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<Double>.TryConvertToTruncating<TOther>(Double, 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<Double>.Zero |
Hämtar värdet |
| ISignedNumber<Double>.NegativeOne |
Hämtar värdet |
| ISubtractionOperators<Double,Double,Double>.Subtraction(Double, Double) |
Subtraherar två värden för att beräkna skillnaden. |
| IUnaryNegationOperators<Double,Double>.UnaryNegation(Double) |
Beräknar en oharisk negation av ett värde. |
| IUnaryPlusOperators<Double,Double>.UnaryPlus(Double) |
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.