Double Struktúra
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Dupla pontosságú lebegőpontos számot jelöl.
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
- Öröklődés
- Attribútumok
- Megvalósítás
-
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>
Példák
Az alábbi példakód a következők használatát szemlélteti 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
Megjegyzések
Az Double értéktípus egy dupla pontosságú 64 bites számot jelöl, amelynek értéke negatív 1,79769313486232e308 és pozitív 1,79769313486232e308, valamint pozitív vagy negatív nulla, PositiveInfinityNegativeInfinityés nem szám (NaN). Kifejezetten nagy értékeket (például bolygók vagy galaxisok közötti távolságokat) vagy rendkívül kicsiket (például egy anyag molekulatömegét kilogrammban) jelöl, és amelyek gyakran pontatlanok (például a földtől egy másik naprendszerig). A Double típus megfelel a bináris lebegőpontos számtani IEC 60559:1989 (IEEE 754) szabványnak.
Lebegőpontos ábrázolás és pontosság
Az Double adattípus a két pontosságú lebegőpontos értékeket 64 bites bináris formátumban tárolja, az alábbi táblázatban látható módon:
| Rész | Bitek |
|---|---|
| Matematikai alapszám vagy mantissza | 0-51 |
| Exponent | 52-62 |
| Jel (0 = Pozitív, 1 = Negatív) | 63 |
Ahogyan a tizedes törtek nem képesek pontosan képviselni bizonyos törtértékeket (például 1/3 vagy Math.PI), a bináris törtek nem képesek bizonyos törtértékeket képviselni. Az 1/10 például, amelyet pontosan .1 tizedes törtként jelöl, a .001100110011 bináris törtként jelenik meg, a "0011" minta pedig a végtelenbe ismétlődik. Ebben az esetben a lebegőpontos érték nem pontos képet ad az általa képviselt számról. Az eredeti lebegőpontos értéken végzett további matematikai műveletek gyakran növelik a pontosság hiányát. Ha például összehasonlítja az .1 és 10 szorzás eredményét, és 0,1-et 9-szer ad hozzá, akkor láthatja, hogy az összeadás, mivel nyolc további műveletet is érintett, a kevésbé pontos eredményt eredményezte. (A 10-es .NET előtt ez az eltérés csak akkor jelenik meg, ha a két Double értéket az "R" standard numerikus formátumú sztring használatával jeleníti meg, amely a Double típus által támogatott 17 számjegyig jeleníti meg a pontosságot.)
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
Mivel egyes számok nem jeleníthetők meg pontosan tört bináris értékekként, a lebegőpontos számok csak a valós számokat tudják megközelíteni.
Az összes lebegőpontos szám is korlátozott számú jelentős számjegyből áll, ami azt is meghatározza, hogy egy lebegőpontos érték mennyire közelíti meg a valós számot. Egy Double érték legfeljebb 15 tizedesjegy pontossággal rendelkezik, de belsőleg legfeljebb 17 számjegy tartható fenn. Ez azt jelenti, hogy egyes lebegőpontos műveletek nem feltétlenül rendelkeznek a lebegőpontos értékek módosításának pontosságával. Az alábbi példa egy illusztrációt tartalmaz. Egy nagyon nagy lebegőpontos értéket határoz meg, majd hozzáadja a Double.Epsilon szorzatát és egy kvadrilliót. A termék azonban túl kicsi az eredeti lebegőpontos érték módosításához. Legkisebb számjegye ezred, míg a termék legjelentősebb számjegye a 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
A lebegőpontos számok korlátozott pontossága számos következménnyel jár:
Előfordulhat, hogy két lebegőpontos szám, amely egy adott pontosságnak felel meg, nem hasonlítható össze egyenlővel, mivel a legkisebb jelentős számjegyeik eltérőek. Az alábbi példában egy számsort adunk össze, és az összegük a várt összeggel lesz összehasonlítva.
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).A két érték egyenlőtlen, mert az összeadási műveletek során a pontosság elvész. Ebben az esetben a probléma megoldható úgy, hogy az összehasonlítás végrehajtása előtt meghívja a Math.Round(Double, Int32) metódust az Double értékek kívánt pontosságú kerekítésére.
Előfordulhat, hogy egy lebegőpontos számot használó matematikai vagy összehasonlító művelet nem ugyanazt az eredményt adja, ha decimális számot használ, mert a bináris lebegőpontos szám nem feltétlenül egyenlő a decimális számmal. Ezt egy korábbi példa szemlélteti a .1 és 10 szorzat eredményének megjelenítésével, majd a .1-szeres összeadással.
Amikor a törtértékekkel rendelkező numerikus műveletek pontossága fontos, a Decimal típus helyett a Double típust használhatja. Ha a típustartományon túli integrálértékekkel rendelkező numerikus műveletek pontossága Int128UInt128 fontos, használja a típust BigInteger .
Single az értékek pontossága kisebb, mint az Double értékeké. A Single érték, amelyet látszólag egyenértékűvé konvertálnak Double, gyakran nem egyenlő a Double értékkel a pontosságbeli különbségek miatt. Az alábbi példában az azonos osztási műveletek eredménye külön-külön a Double és a Single értékhez van rendelve. Miután az Single értéket egy Doubleértékre öntötte, a két érték összehasonlítása azt mutatja, hogy egyenlőtlenek.
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: FalseA probléma elkerülése érdekében használja az Double adattípus helyett Single , vagy használja a Round metódust úgy, hogy mindkét érték ugyanolyan pontosságú legyen.
Emellett az értékekkel végzett Double aritmetikai és hozzárendelési műveletek eredménye platformonként kissé eltérhet a típus pontosságának Double elvesztése miatt. A konstans Double érték hozzárendelésének eredménye például eltérhet a .NET 32 bites és 64 bites verzióiban. Az alábbi példa ezt a különbséget mutatja be, ha a -4.42330604244772E-305 literálérték és a -4.42330604244772E-305 érték egy változóhoz Double van rendelve. Vegye figyelembe, hogy ebben az esetben a Parse(String) módszer eredménye nem szenved a pontosság elvesztésétől.
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
Egyenlőség tesztelése
Az egyenlőséghez két Double értéknek azonos értékeket kell jelölnie. Az értékek közötti pontosságbeli különbségek, illetve az egy vagy mindkét érték pontosságának elvesztése miatt azonban a lebegőpontos értékek, amelyek várhatóan azonosak lesznek, gyakran egyenlőtlenek lesznek a legkisebb jelentős számjegyeik különbségei miatt. Ennek eredményeként meghívja a Equals metódust annak megállapítására, hogy két érték egyenlő-e, vagy a metódus meghívása CompareTo a két Double érték közötti kapcsolat meghatározására, gyakran váratlan eredményeket eredményez. Ez nyilvánvaló a következő példában, ahol két látszólag egyenlő Double érték nem egyenlőnek bizonyul, mert az első 15 számjegy pontosságú, míg a második 17 számjegy pontosságú.
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
Azokban az esetekben, amikor a pontosság elvesztése valószínűleg hatással van az összehasonlítás eredményére, a következő alternatívák bármelyikét alkalmazhatja a Equals metódus meghívására CompareTo :
Hívja meg a Math.Round metódust, hogy mindkét érték azonos pontosságú legyen. Az alábbi példa módosít egy korábbi példát, hogy ezt a megközelítést használja, hogy két törtérték egyenértékű legyen.
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: TrueA pontosság problémája továbbra is a középponti értékek kerekítésére vonatkozik. További információkért tekintse meg a metódust Math.Round(Double, Int32, MidpointRounding) .
Tesztelje a közelítő egyenlőséget az egyenlőség helyett. Ehhez meg kell határoznia egy abszolút összeget, amellyel a két érték eltérhet, de egyenlő lehet, vagy meg kell határoznia egy relatív értéket, amellyel a kisebb érték eltérhet a nagyobb értéktől.
Warning
Double.Epsilon néha a két Double érték közötti távolság abszolút mértékeként használják az egyenlőség vizsgálatakor. Azonban Double.Epsilon a legkisebb lehetséges értéket méri, amely Double értékhez adható hozzá vagy vonható ki belőle, aminek az értéke nulla. A legtöbb pozitív és negatív Double érték esetében az érték Double.Epsilon túl kicsi ahhoz, hogy észlelhető legyen. Ezért a nulla értékek kivételével nem javasoljuk az egyenlőségi tesztekben való használatát.
Az alábbi példa az utóbbi megközelítést használja egy
IsApproximatelyEqualolyan módszer meghatározására, amely két érték közötti relatív különbséget teszteli. A módszer aMath.Max(value1, value2)-vel oszt, ezáltal az összehasonlítás a két érték közül a nagyobb (nagyság szerint) értékhez viszonyul, ami az eredményt a megfelelő nagyságrendre helyezi. HaMath.Maxnullát ad vissza (ami akkor fordul elő, ha az egyik érték nulla, a másik negatív), a metódus visszaesikMath.Min(value1, value2)a nem nulla érték osztóként való használatára. Az összehasonlítást azIsApproximatelyEqualmetódusra és a Equals(Double) metódusra intézett hívások eredményei is érintik.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
Lebegőpontos értékek és kivételek
Az integrál típusú műveletektől eltérően, amelyek nullával való osztást vagy DivideByZeroException túlcsordulást eredményeznek OverflowException egy ellenőrzött környezetben, a lebegőpontos értékekkel végzett műveletek nem adnak kivételt. Ehelyett kivételes helyzetekben a lebegőpontos művelet eredménye nulla, pozitív végtelen, negatív végtelen vagy nem szám (NaN):
Ha egy lebegőpontos művelet eredménye túl kicsi a célformátumhoz, az eredmény nulla. Ez akkor fordulhat elő, ha két nagyon kis szám szorozva van, ahogy az alábbi példa is mutatja.
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: TrueHa egy lebegőpontos művelet eredményének nagysága meghaladja a célformátum tartományát, a művelet PositiveInfinity eredménye vagy NegativeInfinityaz eredmény előjelének megfelelő. A Double.MaxValue túlcsorduló művelet eredménye PositiveInfinity, és egy Double.MinValue túlcsorduló művelet eredménye NegativeInfinity, ahogy az alábbi példa mutatja.
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 pozitív osztalékkal rendelkező nullával történő osztásból is származik, és NegativeInfinity negatív osztalékkal rendelkező nullával való osztás eredménye.
Ha egy lebegőpontos művelet érvénytelen, a művelet eredménye NaN. Például a NaN következő műveletek eredményei:
Osztás nullával nulla osztalékkal. Vegye figyelembe, hogy a nullával való osztás egyéb esetei vagy PositiveInfinity, vagy NegativeInfinity eredményeznek.
Bármely lebegőpontos művelet érvénytelen bemenettel. Ha például negatív értékkel hívja meg a Math.Sqrt metódust, az visszaadja NaN-t, ahogy a Math.Acos metódust is visszaadja NaN-t, ha egynél nagyobb vagy mínusz egynél kisebb értékkel hívják meg.
Bármely művelet, amelynek argumentuma értéke Double.NaN.
Típuskonverziók
A Double struktúra nem határoz meg explicit vagy implicit konverziós operátorokat, ehelyett a fordításokat a fordító implementálja.
Bármely primitív numerikus típus Double értékének konvertálása szélesítő átalakítás, ezért nem igényel explicit öntött operátort vagy átalakítási metódus meghívását, kivéve, ha egy fordító kifejezetten megköveteli. A C#-fordítóhoz például egy casting operátorra van szükség a Decimal és Double közötti átalakításhoz, míg a Visual Basic fordító nem. Az alábbi példa más primitív numerikus típusok minimális vagy maximális értékét konvertálja Double értékre.
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)
Emellett a Single, Single.NaN, és Single.PositiveInfinity értékek átalakulnak Single.NegativeInfinity, Double.NaN, és Double.PositiveInfinity értékekké, illetve Double.NegativeInfinity-é.
Vegye figyelembe, hogy bizonyos numerikus típusok értékké Double alakítása a pontosság elvesztésével járhat. Ahogy a példa is mutatja, a pontosságvesztés lehetséges, amikor a Decimal, Int64 és UInt64 értékeket Double értékekké alakítjuk.
A Double érték konvertálása bármely más primitív numerikus adattípus értékére szűkítő konverzió, amelyhez öntött operátor (C#-ban), átalakítási módszerre (Visual Basic) vagy Convert metódus hívására van szükség. A céladattípus tartományán kívül eső értékek, amelyeket a céltípus MinValue és MaxValue a tulajdonságok határoznak meg, az alábbi táblázatban látható módon viselkednek.
| Céltípus | Result |
|---|---|
| Bármilyen integráltípus | Kivétel OverflowException , ha az átalakítás ellenőrzött környezetben történik. Ha az átalakítás nem ellenőrzött környezetben történik (az alapértelmezett C#-ban), a konvertálási művelet sikeres, de az érték túlcsordul. |
| Decimal | Egy kivétel OverflowException. |
| Single |
Single.NegativeInfinity negatív értékek esetén. Single.PositiveInfinity pozitív értékek esetén. |
Ezen kívül Double.NaN, Double.PositiveInfinity és Double.NegativeInfinity egy OverflowException-t dob az egész számokká történő konvertáláskor egy ellenőrzött környezetben, de ezek az értékek túlcsordulnak, amikor nem ellenőrzött környezetben alakulnak egész számokká. A Decimal konvertálásánál mindig dob egy OverflowException. A konvertálás során Single-ra, Single.NaN-re, Single.PositiveInfinity-re és Single.NegativeInfinity-ra konvertálnak.
A pontosság elvesztését okozhatja, ha egy Double értéket más numerikus típussá alakít át. Az integráltípusok bármelyikére való konvertálás esetén, amint az a példa kimenetében látható, a tört összetevő elveszik, ha az Double érték kerekítve van (Visual Basic esetén) vagy csonkolva (a C# esetén). Konvertálások esetén Decimal és Single értékekre, előfordulhat, hogy az Double érték nem rendelkezik pontos ábrázolással a céladattípusban.
Az alábbi példa számos Double értéket konvertál több más numerikus típussá. A konvertálások egy ellenőrzött környezetben történnek Visual Basic (alapértelmezett), c# (a bejelölt kulcsszó miatt) és F# (a Checked modul miatt). A példában szereplő kimenet az eredményt mutatja mind az ellenőrzött, mind a nem ellenőrzött környezetben történő átalakításokra. A konvertálásokat a Visual Basicben ellenőrizetlen környezetben végezheti el a /removeintchecks+ fordítókapcsolóval való összeállítással, c# nyelven az checked utasítás megjegyzésével, F#-ban pedig az open Checked utasítás megjegyzésével.
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)
A numerikus típusok konvertálásával kapcsolatos további információkért lásd a típuskonvertálást a .NET-ben és atípuskonvertálási táblákat.
Lebegőpontos funkciók
A Double struktúra és a kapcsolódó típusok a következő területeken biztosítják a műveletek végrehajtásának módszereit:
Értékek összehasonlítása. Meghívhatja a Equals metódust annak meghatározására, hogy két Double érték egyenlő-e, vagy a CompareTo két érték közötti kapcsolatot meghatározó metódust.
A Double struktúra az összehasonlító operátorok teljes készletét is támogatja. Tesztelheti például az egyenlőséget vagy az egyenlőtlenséget, vagy meghatározhatja, hogy az egyik érték nagyobb-e, mint egy másik. Ha az operandusok egyike nem egy numerikus típus Double, akkor az összehasonlítás végrehajtása előtt a program átalakítja azt egy Double számmá.
Warning
A pontosságbeli különbségek miatt két Double érték, amelyeket egyenlőnek várnak, eltérőnek bizonyulhatnak, ami befolyásolja az összehasonlítás eredményét. A két Double érték összehasonlításával kapcsolatos információkért lásd az Egyenlőségi teszt szakaszt.
Meghívhatja a IsNaN, , IsInfinityIsPositiveInfinityés IsNegativeInfinity metódusokat is, hogy teszteljék ezeket a speciális értékeket.
Matematikai műveletek. A gyakori aritmetikai műveleteket, például az összeadást, kivonást, szorzást és osztást nem metódusokkal hajtják végre, hanem a nyelvi fordítók és a közös köztes nyelv (CIL) utasításai. Ha egy matematikai művelet egyik operandusa nem egy numerikus típus Double, akkor a művelet végrehajtása előtt a program átalakítja egy operandussá Double . A művelet eredménye is egy Double érték.
Más matematikai műveletek is elvégezhetők a
static(SharedVisual Basic) metódus meghívásával a System.Math osztályban. Ez magában foglalja az aritmetikai (például Math.Abs, Math.Signés ), geometria (például Math.Sqrt és Math.CosMath.Sin) és számításhoz (például Math.Log) gyakran használt további módszereket is.Egy Double értékben az egyes biteket is manipulálhatja. A BitConverter.DoubleToInt64Bits metódus megőrzi egy Double érték bitmintáját egy 64 bites egész számban. A BitConverter.GetBytes(Double) metódus visszaadja a bitmintáját egy bájttömbben.
Kerekítés. A kerekítést gyakran használják a lebegőpontos ábrázolás és pontosság problémái által okozott értékek közötti különbségek hatásának csökkentésére. A Double értéket a Math.Round függvény meghívásával kerekítheti.
Formázás. Az Double értékeket sztringként is megjelenítheti a ToString metódus meghívásával vagy az összetett formázási funkció használatával. Az információért arról, hogyan szabályozzák a formátum stringek a lebegőpontos értékek sztring reprezentációját, lásd: Standard Numeric Format Strings és Custom Numeric Format Strings.
Sztringek elemzése. A lebegőpontos érték sztringképét átalakíthatja Double értékké a Parse vagy a TryParse metódus meghívásával. Ha az elemzési művelet sikertelen, a Parse metódus kivételt ad vissza, míg a TryParse metódus ad vissza
false.Típuskonvertálás. A Double struktúra explicit felületi implementációt biztosít a IConvertible interfészhez, amely támogatja a két szabványos .NET adattípus közötti átalakítást. A fordítók támogatják a standard numerikus típusok minden más értékének implicit átalakítását Double értékekké. Bármely standard numerikus típus Double értékének konvertálása kibővítő átalakítás, és nem igényel öntvény operátort vagy átalakítási módszert.
Az értékek konvertálása Int64Single azonban a pontosság elvesztésével járhat. Az alábbi táblázat az alábbi típusok pontossági különbségeit sorolja fel:
Típus Maximális pontosság Belső pontosság Double 15 17 Int64 19 tizedesjegy 19 tizedesjegy Single 7 tizedesjegyek 9 tizedesjegy A pontosság problémája leggyakrabban az Single értékekből Double értékekké konvertált értékeket érinti. Az alábbi példában két azonos osztási művelet eredménye egyenlőtlen, mert az egyik egy egyszeres pontosságú lebegőpontos érték, amely átalakításra került egy Double típusú értékké.
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
Mezők
| Név | Description |
|---|---|
| E |
Az állandó által megadott természetes logaritmikus bázist jelöli, e. |
| Epsilon |
A legkisebb pozitív Double értéket jelöli, amely nagyobb, mint nulla. Ez a mező állandó. |
| MaxValue |
A lehetséges legnagyobb értéket Doublejelöli. Ez a mező állandó. |
| MinValue |
A lehető legkisebb értéket jelöli.Double Ez a mező állandó. |
| NaN |
Olyan értéket jelöl, amely nem szám ( |
| NegativeInfinity |
Negatív végtelent jelöl. Ez a mező állandó. |
| NegativeZero |
A negatív nullát (-0) jelöli. |
| Pi |
Egy kör kerületének és átmérőjének a konstans által megadott π arányát jelöli. |
| PositiveInfinity |
Pozitív végtelenséget jelöl. Ez a mező állandó. |
| Tau |
A radiánok számát jelöli egyfordulóban, a τ állandó határozza meg. |
Metódusok
| Név | Description |
|---|---|
| Abs(Double) |
Kiszámítja egy érték abszolút értékét. |
| Acos(Double) |
Kiszámítja egy érték arc-koszinuszát. |
| Acosh(Double) |
Kiszámítja egy érték hiperbolikus arc-koszinuszát. |
| AcosPi(Double) |
Kiszámítja egy érték arc-koszinuszát, és elosztja az eredményt a következővel |
| Asin(Double) |
Kiszámítja egy érték arc-szinuszát. |
| Asinh(Double) |
Kiszámítja egy érték hiperbolikus arc-szinuszát. |
| AsinPi(Double) |
Kiszámítja egy érték arc-szinuszát, és elosztja az eredményt a következővel |
| Atan(Double) |
Kiszámítja egy érték ív-tangensét. |
| Atan2(Double, Double) |
Két érték hányadosának ív-tangensét számítja ki. |
| Atan2Pi(Double, Double) |
Kiszámítja a két érték hányadosának ív-tangensét, és az eredményt osztja el a következővel |
| Atanh(Double) |
Kiszámítja egy érték hiperbolikus ív-tangensét. |
| AtanPi(Double) |
Kiszámítja egy érték ív-tangensét, és pi-vel osztja el az eredményt. |
| BitDecrement(Double) |
A megadott értéknél kisebb értéket összehasonlító legnagyobb értéket adja eredményül. |
| BitIncrement(Double) |
A megadott értéknél nagyobbat hasonlító legkisebb értéket adja eredményül. |
| Cbrt(Double) |
Kiszámítja egy érték kockagyökerét. |
| Ceiling(Double) |
Kiszámítja egy érték felső határát. |
| Clamp(Double, Double, Double) |
Egy értéket egy befogadó minimális és maximális értékhez rögzít. |
| ClampNative(Double, Double, Double) |
Egy értéket egy befogadó minimális és maximális értékhez rögzít platformspecifikus viselkedéssel |
| CompareTo(Double) |
Összehasonlítja ezt a példányt egy megadott dupla pontosságú lebegőpontos számmal, és egy egész számot ad vissza, amely azt jelzi, hogy a példány értéke kisebb,egyenlő vagy nagyobb-e, mint a megadott dupla pontosságú lebegőpontos szám értéke. |
| CompareTo(Object) |
Összehasonlítja ezt a példányt egy adott objektummal, és egy egész számot ad vissza, amely jelzi, hogy a példány értéke kisebb,egyenlő vagy nagyobb-e, mint a megadott objektum értéke. |
| ConvertToInteger<TInteger>(Double) |
Érték konvertálása megadott egész számtípusra túlcsordulási telítettség használatával |
| ConvertToIntegerNative<TInteger>(Double) |
Egy értéket egy megadott egész számtípussá alakít át a túlcsordulás platformspecifikus viselkedésének használatával. |
| CopySign(Double, Double) |
Egy érték jelét egy másik érték jelére másolja. |
| Cos(Double) |
Kiszámítja egy érték koszinuszát. |
| Cosh(Double) |
Kiszámítja egy érték koszinusz hiperbolikuszát. |
| CosPi(Double) |
Kiszámítja a szorzott érték |
| CreateChecked<TOther>(TOther) |
Létrehozza az aktuális típus egy példányát egy értékből, amely túlcsordulási kivételt eredményez az aktuális típus ábrázolható tartományán kívül eső értékek esetében. |
| CreateSaturating<TOther>(TOther) |
Egy értékből hozza létre az aktuális típus egy példányát, amely az aktuális típus reprezentáló tartományán kívül eső értékeket telít át. |
| CreateTruncating<TOther>(TOther) |
Az aktuális típus egy példányát hozza létre egy értékből, és csonkolja az aktuális típus ábrázolható tartományán kívül eső értékeket. |
| DegreesToRadians(Double) |
Egy adott értéket radiánmá alakít át fokról radiánra. |
| Equals(Double) |
Egy értéket ad vissza, amely jelzi, hogy ez a példány és egy adott Double objektum ugyanazt az értéket képviseli-e. |
| Equals(Object) |
Egy értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal. |
| Exp(Double) |
|
| Exp10(Double) |
|
| Exp10M1(Double) |
|
| Exp2(Double) |
|
| Exp2M1(Double) |
|
| ExpM1(Double) |
|
| Floor(Double) |
Kiszámítja egy érték padlóját. |
| FusedMultiplyAdd(Double, Double, Double) |
Kiszámítja a három érték összeolvadt szorzását. |
| GetHashCode() |
A példány kivonatkódját adja vissza. |
| GetTypeCode() | |
| Hypot(Double, Double) |
Kiszámítja a hipotenuzát két érték alapján, amelyek egy derékszögű háromszög rövidebb oldalainak hosszát jelölik. |
| Ieee754Remainder(Double, Double) |
Az IEEE 754 által megadott két érték fennmaradó részét számítja ki. |
| ILogB(Double) |
Kiszámítja egy érték egész logaritmusát. |
| IsEvenInteger(Double) |
Meghatározza, hogy egy érték páros integrál számot jelöl-e. |
| IsFinite(Double) |
Meghatározza, hogy a megadott érték véges-e (nulla, szubnormális vagy normál). |
| IsInfinity(Double) |
Egy értéket ad vissza, amely azt jelzi, hogy a megadott szám negatív vagy pozitív végtelen lesz-e. |
| IsInteger(Double) |
Meghatározza, hogy egy érték egy integrál értéket jelöl-e. |
| IsNaN(Double) |
Olyan értéket ad vissza, amely azt jelzi, hogy a megadott érték nem szám-e (NaN). |
| IsNegative(Double) |
Meghatározza, hogy a megadott érték negatív-e. |
| IsNegativeInfinity(Double) |
Egy értéket ad vissza, amely azt jelzi, hogy a megadott szám negatív végtelen lesz-e. |
| IsNormal(Double) |
Meghatározza, hogy a megadott érték normális-e. |
| IsOddInteger(Double) |
Meghatározza, hogy egy érték páratlan integrál számot jelöl-e. |
| IsPositive(Double) |
Meghatározza, hogy egy érték pozitív-e. |
| IsPositiveInfinity(Double) |
Egy értéket ad vissza, amely azt jelzi, hogy a megadott szám pozitív végtelen lesz-e. |
| IsPow2(Double) |
Meghatározza, hogy egy érték kettőből áll-e. |
| IsRealNumber(Double) |
Meghatározza, hogy egy érték valós számot jelöl-e. |
| IsSubnormal(Double) |
Meghatározza, hogy a megadott érték szubnormális-e. |
| Lerp(Double, Double, Double) |
Lineáris interpolációt végez két érték között a megadott súly alapján. |
| Log(Double, Double) |
Kiszámítja egy érték logaritmusát a megadott alapban. |
| Log(Double) |
Kiszámítja egy érték természetes ( |
| Log10(Double) |
Kiszámítja egy érték 10-es alapú logaritmusát. |
| Log10P1(Double) |
Kiszámítja egy érték és egy érték 10-es logaritmusát. |
| Log2(Double) |
Kiszámítja egy érték napló2-ét. |
| Log2P1(Double) |
Egy érték és egy érték 2-es logaritmusát számítja ki. |
| LogP1(Double) |
Kiszámítja egy érték természetes ( |
| Max(Double, Double) |
Két értéket hasonlít össze a nagyobb számítási értékekkel. |
| MaxMagnitude(Double, Double) |
Két értéket hasonlít össze a nagyobb számítási értékekkel. |
| MaxMagnitudeNumber(Double, Double) |
Két értéket hasonlít össze a számítással, amelynek nagyobb a nagysága, és a másik értéket adja vissza, ha egy bemenet . |
| MaxNative(Double, Double) |
Két értéket hasonlít össze a számítással, amely nagyobb a platformspecifikus viselkedés és |
| MaxNumber(Double, Double) |
Két értéket hasonlít össze a számítással, amely nagyobb, és a másik értéket adja vissza, ha egy bemenet . |
| Min(Double, Double) |
Két értéket hasonlít össze a kisebb számítási értékkel. |
| MinMagnitude(Double, Double) |
Két értéket hasonlít össze a kisebb számítási értékkel. |
| MinMagnitudeNumber(Double, Double) |
Két értéket hasonlít össze a számítással, amelynek kisebb a nagysága, és a másik értéket adja vissza, ha egy bemenet . |
| MinNative(Double, Double) |
Két értéket hasonlít össze a számítással, amely kisebb a platformspecifikus viselkedés és |
| MinNumber(Double, Double) |
Két értéket hasonlít össze a kisebb számítási értékkel, és a másik értéket adja vissza, ha egy bemenet . |
| MultiplyAddEstimate(Double, Double, Double) |
Kiszámítja a ( |
| Parse(ReadOnlySpan<Byte>, IFormatProvider) |
UTF-8 karakterből álló tartományt elemez egy értékben. |
| Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider) |
UTF-8 karakterből álló tartományt elemez egy értékben. |
| Parse(ReadOnlySpan<Char>, IFormatProvider) |
Több karakterből álló elemet elemez egy értékben. |
| Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Egy adott stílusban és kultúrában megadott formátumban lévő szám sztring-ábrázolását tartalmazó karakterfedezetet alakít át dupla pontosságú lebegőpontos számegyenértékké. |
| Parse(String, IFormatProvider) |
Egy adott kultúraspecifikus formátumban lévő szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. |
| Parse(String, NumberStyles, IFormatProvider) |
Egy szám sztring-ábrázolását egy megadott stílusban és kultúraspecifikus formátumban alakítja át dupla pontosságú lebegőpontos számegyenértékké. |
| Parse(String, NumberStyles) |
Egy adott stílusban lévő szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. |
| Parse(String) |
Egy szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. |
| Pow(Double, Double) |
Kiszámít egy adott teljesítményre emelt értéket. |
| RadiansToDegrees(Double) |
Egy adott értéket radiánból fokmá alakít át. |
| ReciprocalEstimate(Double) |
Kiszámítja egy érték reciprokának becslését. |
| ReciprocalSqrtEstimate(Double) |
Kiszámítja egy érték reciprok négyzetgyökének becslését. |
| RootN(Double, Int32) |
Kiszámítja egy érték n-edik gyökerét. |
| Round(Double, Int32, MidpointRounding) |
Egy értéket az alapértelmezett kerekítési mód (ToEven) használatával adott számú törtjegyre kerekített. |
| Round(Double, Int32) |
Egy értéket az alapértelmezett kerekítési mód (ToEven) használatával adott számú törtjegyre kerekített. |
| Round(Double, MidpointRounding) |
Egy értéket a megadott kerekítési móddal a legközelebbi egész számra kerekít. |
| Round(Double) |
Egy értéket az alapértelmezett kerekítési mód (ToEven) használatával a legközelebbi egész számra kerekít. |
| ScaleB(Double, Int32) |
Kiszámítja egy érték szorzatát és a megadott teljesítményre emelt alap radixát. |
| Sign(Double) |
Kiszámítja egy érték jelét. |
| Sin(Double) |
Kiszámítja egy érték szinuszát. |
| SinCos(Double) |
Kiszámítja egy érték szinuszát és koszinuszát. |
| SinCosPi(Double) |
Kiszámítja egy érték szinuszát és koszinuszát. |
| Sinh(Double) |
Kiszámítja egy érték szinusz hiperbolikuszát. |
| SinPi(Double) |
A szorzott érték szinuszát számítja ki |
| Sqrt(Double) |
Kiszámítja egy érték négyzetgyökét. |
| Tan(Double) |
Kiszámítja egy érték tangensét. |
| Tanh(Double) |
Kiszámítja egy érték hiperbolikus tangensét. |
| TanPi(Double) |
Kiszámítja a szorzott érték tangensét |
| ToString() |
A példány numerikus értékét a megfelelő sztring-ábrázolásúvá alakítja. |
| ToString(IFormatProvider) |
A példány numerikus értékét a megadott kultúraspecifikus formátumadatok használatával konvertálja a megfelelő sztringre. |
| ToString(String, IFormatProvider) |
Ennek a példánynak a numerikus értékét a megadott formátum- és kultúraspecifikus formátuminformációk használatával konvertálja a megfelelő sztringre. |
| ToString(String) |
A megadott formátum használatával a példány numerikus értékét a megfelelő sztring-ábrázolásúvá alakítja. |
| Truncate(Double) |
Csonkít egy értéket. |
| TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Az aktuális példány értékét UTF-8 formátumban próbálja formázni a megadott bájttartományba. |
| TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Megpróbálja formázni az aktuális dupla példány értékét a megadott karaktertartományba. |
| TryParse(ReadOnlySpan<Byte>, Double) |
Egy szám sztringképét tartalmazó UTF-8 karaktert próbál átalakítani a kettős pontosságú lebegőpontos számmal egyenértékűre. |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double) |
Egy UTF-8 karakterből álló pántot próbál elemezni egy értékben. |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double) |
Egy UTF-8 karakterből álló pántot próbál elemezni egy értékben. |
| TryParse(ReadOnlySpan<Char>, Double) |
Egy adott stílusban és kultúrában megadott formátumban lévő szám span-ábrázolását dupla pontosságú lebegőpontos számegyenértékké alakítja. A visszatérési érték azt jelzi, hogy az átalakítás sikeres vagy sikertelen volt-e. |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, Double) |
Egy karaktertartományt próbál elemezni egy értékben. |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double) |
Egy adott stílusban és kultúrában megadott formátumú szám sztring-ábrázolását tartalmazó karakterfedést alakít át dupla pontosságú lebegőpontos számegyenértékké. A visszatérési érték azt jelzi, hogy az átalakítás sikeres vagy sikertelen volt-e. |
| TryParse(String, Double) |
Egy szám sztringképét dupla pontosságú lebegőpontos számegyenértékké alakítja. A visszatérési érték azt jelzi, hogy az átalakítás sikeres vagy sikertelen volt-e. |
| TryParse(String, IFormatProvider, Double) |
Megpróbál egy sztringet egy értékbe elemezni. |
| TryParse(String, NumberStyles, IFormatProvider, Double) |
Egy szám sztring-ábrázolását egy megadott stílusban és kultúraspecifikus formátumban alakítja át dupla pontosságú lebegőpontos számegyenértékké. A visszatérési érték azt jelzi, hogy az átalakítás sikeres vagy sikertelen volt-e. |
| TryParsePartial(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double, Int32) |
Dupla pontosságú lebegőpontos számot jelöl. |
| TryParsePartial(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double, Int32) |
Dupla pontosságú lebegőpontos számot jelöl. |
| TryParsePartial(String, NumberStyles, IFormatProvider, Double, Int32) |
Dupla pontosságú lebegőpontos számot jelöl. |
Operátorok
| Név | Description |
|---|---|
| Equality(Double, Double) |
Olyan értéket ad vissza, amely jelzi, hogy két megadott Double érték egyenlő-e. |
| GreaterThan(Double, Double) |
Olyan értéket ad vissza, amely azt jelzi, hogy egy megadott Double érték nagyobb-e egy másik megadott Double értéknél. |
| GreaterThanOrEqual(Double, Double) |
Olyan értéket ad vissza, amely azt jelzi, hogy egy megadott Double érték nagyobb-e, mint egy másik megadott Double érték. |
| Inequality(Double, Double) |
Olyan értéket ad vissza, amely jelzi, hogy két megadott Double érték nem egyenlő-e. |
| LessThan(Double, Double) |
Olyan értéket ad vissza, amely azt jelzi, hogy egy megadott Double érték kisebb-e egy másik megadott Double értéknél. |
| LessThanOrEqual(Double, Double) |
Olyan értéket ad vissza, amely azt jelzi, hogy egy megadott Double érték kisebb-e, mint egy másik megadott Double érték. |
Explicit interfész-implementációk
| Név | Description |
|---|---|
| IAdditionOperators<Double,Double,Double>.Addition(Double, Double) |
Két értéket ad hozzá az összeg kiszámításához. |
| IAdditiveIdentity<Double,Double>.AdditiveIdentity |
Lekéri az aktuális típus additív identitását. |
| IBinaryNumber<Double>.AllBitsSet |
Lekéri annak a bináris típusnak a példányát, amelyben az összes bit be van állítva. |
| IBitwiseOperators<Double,Double,Double>.BitwiseAnd(Double, Double) |
Kiszámítja a bitenkénti és két értéket. |
| IBitwiseOperators<Double,Double,Double>.BitwiseOr(Double, Double) |
Kiszámítja a bitenkénti vagy két értéket. |
| IBitwiseOperators<Double,Double,Double>.ExclusiveOr(Double, Double) |
Kiszámítja a kizárólagos vagy két értéket. |
| IBitwiseOperators<Double,Double,Double>.OnesComplement(Double) |
Kiszámítja egy adott érték egyedkiegészítő ábrázolását. |
| IComparable.CompareTo(Object) |
Összehasonlítja az aktuális példányt egy másik, azonos típusú objektummal, és egy egész számot ad vissza, amely azt jelzi, hogy az aktuális példány megelőzi, követi vagy ugyanabban a sorrendben fordul elő, mint a másik objektum. |
| IConvertible.GetTypeCode() |
TypeCode A példány értékét adja vissza. |
| IConvertible.ToBoolean(IFormatProvider) |
Ennek a tagnak a leírását lásd ToBoolean(IFormatProvider): . |
| IConvertible.ToByte(IFormatProvider) |
Ennek a tagnak a leírását lásd ToByte(IFormatProvider): . |
| IConvertible.ToChar(IFormatProvider) |
Ez az átalakítás nem támogatott. A metódus használatának megkísérlése egy InvalidCastException. |
| IConvertible.ToDateTime(IFormatProvider) |
Ez az átalakítás nem támogatott. A metódus használatának megkísérlése egy InvalidCastException. |
| IConvertible.ToDecimal(IFormatProvider) |
Ennek a tagnak a leírását lásd ToDecimal(IFormatProvider): . |
| IConvertible.ToDouble(IFormatProvider) |
Ennek a tagnak a leírását lásd ToDouble(IFormatProvider): . |
| IConvertible.ToInt16(IFormatProvider) |
Ennek a tagnak a leírását lásd ToInt16(IFormatProvider): . |
| IConvertible.ToInt32(IFormatProvider) |
Ennek a tagnak a leírását lásd ToInt32(IFormatProvider): . |
| IConvertible.ToInt64(IFormatProvider) |
Ennek a tagnak a leírását lásd ToInt64(IFormatProvider): . |
| IConvertible.ToSByte(IFormatProvider) |
Ennek a tagnak a leírását lásd ToSByte(IFormatProvider): . |
| IConvertible.ToSingle(IFormatProvider) |
Ennek a tagnak a leírását lásd ToSingle(IFormatProvider): . |
| IConvertible.ToType(Type, IFormatProvider) |
Ennek a tagnak a leírását lásd ToType(Type, IFormatProvider): . |
| IConvertible.ToUInt16(IFormatProvider) |
Ennek a tagnak a leírását lásd ToUInt16(IFormatProvider): . |
| IConvertible.ToUInt32(IFormatProvider) |
Ennek a tagnak a leírását lásd ToUInt32(IFormatProvider): . |
| IConvertible.ToUInt64(IFormatProvider) |
Ennek a tagnak a leírását lásd ToUInt64(IFormatProvider): . |
| IDecrementOperators<Double>.Decrement(Double) |
Érték decresítése. |
| IDivisionOperators<Double,Double,Double>.Division(Double, Double) |
Az egyik értéket egy másikkal osztja el a hányados kiszámításához. |
| IFloatingPoint<Double>.GetExponentByteCount() |
Beolvasja a program által a program részeként megírt bájtok TryWriteExponentLittleEndian(Span<Byte>, Int32)számát. |
| IFloatingPoint<Double>.GetExponentShortestBitLength() |
Bitekben lekéri az aktuális kitevő rövidítésének hosszát. |
| IFloatingPoint<Double>.GetSignificandBitLength() |
Lekéri az aktuális jelző hosszát bitben. |
| IFloatingPoint<Double>.GetSignificandByteCount() |
Beolvasja a program által a program részeként megírt bájtok TryWriteSignificandLittleEndian(Span<Byte>, Int32)számát. |
| IFloatingPoint<Double>.TryWriteExponentBigEndian(Span<Byte>, Int32) |
Megpróbálja megírni az aktuális kitevőt big endian formátumban egy adott időtartamra. |
| IFloatingPoint<Double>.TryWriteExponentLittleEndian(Span<Byte>, Int32) |
Megpróbálja megírni az aktuális kitevőt, kis végű formátumban, egy adott időtartamra. |
| IFloatingPoint<Double>.TryWriteSignificandBigEndian(Span<Byte>, Int32) |
Megpróbálja megírni az aktuális jelzőt, és big-endian formátumban egy adott időtartamra. |
| IFloatingPoint<Double>.TryWriteSignificandLittleEndian(Span<Byte>, Int32) |
Megpróbálja megírni az aktuális jelzőt, és kis endian formátumban egy adott tartományba. |
| IFloatingPointConstants<Double>.E |
Lekéri a matematikai állandót |
| IFloatingPointConstants<Double>.Pi |
Lekéri a matematikai állandót |
| IFloatingPointConstants<Double>.Tau |
Lekéri a matematikai állandót |
| IFloatingPointIeee754<Double>.Epsilon |
Lekéri a legkisebb értéket, amely hozzáadható |
| IFloatingPointIeee754<Double>.NaN |
A értéket adja |
| IFloatingPointIeee754<Double>.NegativeInfinity |
Negatív |
| IFloatingPointIeee754<Double>.NegativeZero |
Negatív |
| IFloatingPointIeee754<Double>.PositiveInfinity |
Pozitív értéket kap |
| IIncrementOperators<Double>.Increment(Double) |
Növekményes érték. |
| IMinMaxValue<Double>.MaxValue |
Az aktuális típus maximális értékét adja meg. |
| IMinMaxValue<Double>.MinValue |
Az aktuális típus minimális értékét adja meg. |
| IModulusOperators<Double,Double,Double>.Modulus(Double, Double) |
Két értéket oszt össze a modulus vagy a maradék kiszámításához. |
| IMultiplicativeIdentity<Double,Double>.MultiplicativeIdentity |
Lekéri az aktuális típus többszörös identitását. |
| IMultiplyOperators<Double,Double,Double>.Multiply(Double, Double) |
Két értéket szoroz össze a termék kiszámításához. |
| INumberBase<Double>.IsCanonical(Double) |
Meghatározza, hogy egy érték a vesszővel ábrázolt érték-e. |
| INumberBase<Double>.IsComplexNumber(Double) |
Meghatározza, hogy egy érték összetett számot jelöl-e. |
| INumberBase<Double>.IsImaginaryNumber(Double) |
Meghatározza, hogy egy érték tiszta képzeletbeli számot jelöl-e. |
| INumberBase<Double>.IsZero(Double) |
Meghatározza, hogy egy érték nulla-e. |
| INumberBase<Double>.One |
Lekéri a típus értékét |
| INumberBase<Double>.Radix |
Lekéri a típus radixát vagy bázist. |
| INumberBase<Double>.TryConvertFromChecked<TOther>(TOther, Double) |
Dupla pontosságú lebegőpontos számot jelöl. |
| INumberBase<Double>.TryConvertFromSaturating<TOther>(TOther, Double) |
Dupla pontosságú lebegőpontos számot jelöl. |
| INumberBase<Double>.TryConvertFromTruncating<TOther>(TOther, Double) |
Dupla pontosságú lebegőpontos számot jelöl. |
| INumberBase<Double>.TryConvertToChecked<TOther>(Double, TOther) |
Megpróbálja átalakítani az aktuális típus egy példányát egy másik típusra, és túlcsordulási kivételt okoz az aktuális típus ábrázolható tartományán kívül eső értékek esetében. |
| INumberBase<Double>.TryConvertToSaturating<TOther>(Double, TOther) |
Megpróbálja átalakítani az aktuális típus egy példányát egy másik típusra, és az aktuális típus reprezentáló tartományán kívül eső értékeket telít. |
| INumberBase<Double>.TryConvertToTruncating<TOther>(Double, TOther) |
Megpróbálja átalakítani az aktuális típus egy példányát egy másik típusra, és csonkolja az aktuális típus ábrázolható tartományán kívül eső értékeket. |
| INumberBase<Double>.Zero |
Lekéri a típus értékét |
| ISignedNumber<Double>.NegativeOne |
Lekéri a típus értékét |
| ISubtractionOperators<Double,Double,Double>.Subtraction(Double, Double) |
Kivon két értéket a különbség kiszámításához. |
| IUnaryNegationOperators<Double,Double>.UnaryNegation(Double) |
Kiszámítja egy érték nem kötelező negációját. |
| IUnaryPlusOperators<Double,Double>.UnaryPlus(Double) |
Kiszámítja egy érték unáris pluszát. |
A következőre érvényes:
Szálbiztonság
Az ilyen típusú tagok szálbiztosak. Azok a tagok, amelyek úgy tűnik, hogy módosítják a példány állapotát, valójában egy új példányt ad vissza, amely inicializálva van az új értékkel. Mint minden más típus esetén, az ilyen típusú példányt tartalmazó megosztott változókra való olvasást és írást zárolással kell védeni a szálbiztonság érdekében.