Assembly : mscorlib (dans mscorlib.dll)
Syntaxe<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public Structure Double Implements IComparable, IFormattable, IConvertible, IComparable(Of Double), _ IEquatable(Of Double)
Dim instance As Double
[SerializableAttribute] [ComVisibleAttribute(true)] public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
[SerializableAttribute] [ComVisibleAttribute(true)] public value class Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ public final class Double extends ValueType implements IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
JScript prend en charge l'utilisation de structures mais pas la déclaration de nouvelles structures.
NotesLe type valeur Double représente un nombre 64 bits double précision dont les valeurs varient de moins 1,79769313486232e308 à plus 1,79769313486232e308, de plus zéro à moins zéro, PositiveInfinity, NegativeInfinity ou ne sont pas numériques (Not-A-Number) (NaN).
Double est conforme à la norme IEC 60559:1989 (IEEE 754) d'arithmétique binaire à virgule flottante.
Double fournit les méthodes permettant de comparer les instances de ce type, de convertir la valeur d'une instance en représentation sous forme de chaîne et de convertir la représentation sous forme de chaîne d'un nombre en instance de ce type. Pour plus d'informations sur la façon dont les codes de spécification de format contrôlent la représentation sous forme de chaîne des types valeur, consultez Vue d'ensemble des formats, Chaînes de format numériques standard et Chaînes de format numériques personnalisées.
Utilisation de nombres à virgule flottante
Si au cours d'opérations binaires, l'un des opérandes est Double, l'autre opérande doit alors être de type intégral ou de type virgule flottante (Double ou Single). Si, avant d'effectuer l'opération, l'autre opérande n'est pas Double, il est alors converti en Double et l'opération est effectuée à l'aide d'au moins une précision et une plage Double. Si l'opération donne un résultat numérique, le type de ce résultat est alors Double.
Les opérateurs à virgule flottante, y compris les opérateurs d'assignation, ne lèvent pas d'exceptions. Dans des cas exceptionnels, le résultat d'une opération en virgule flottante est zéro, infini ou NaN, comme indiqué ci-dessous :
-
Si le résultat d'une opération en virgule flottante est trop petit pour le format de destination, le résultat de l'opération est alors zéro.
-
Si le résultat d'une opération en virgule flottante est trop grand pour le format de destination, le résultat de l'opération est alors PositiveInfinity ou NegativeInfinity, en fonction du signe du résultat.
-
Si une opération en virgule flottante n'est pas valide, le résultat de l'opération est alors NaN.
-
Si un ou deux opérandes d'une opération en virgule flottante sont NaN, le résultat de l'opération est alors NaN.
Souvenez-vous qu'un nombre à virgule flottante ne peut se rapprocher qu'approximativement d'un nombre décimal, et que la précision d'un nombre à virgule flottante détermine dans quelle mesure il se rapproche d'un nombre décimal. Même si 17 chiffres maximum sont gérés en interne, la précision de la valeur Double ne comporte par défaut que 15 chiffres décimaux. La précision d'un nombre à virgule flottante a plusieurs conséquences :
-
Deux nombres à virgule flottante qui apparaissent égaux à un niveau de précision particulier peuvent ne pas être égaux parce que leurs chiffres les moins significatifs sont différents.
-
Une opération mathématique ou de comparaison qui utilise un nombre à virgule flottante peut pas avoir le même résultat si un nombre décimal est utilisé, car le nombre à virgule flottante peut ne pas se rapprocher exactement du nombre décimal.
-
Une valeur peut ne pas effectuer un aller-retour si un nombre à virgule flottante est impliqué. Une valeur est décrite comme effectuant un aller-retour si une opération convertit un nombre à virgule flottante d'origine dans une autre forme, si une opération inverse transforme la forme convertie en nombre à virgule flottante, et si le dernier nombre à virgule flottante est égal au nombre à virgule flottante d'origine. L'aller-retour peut échouer parce qu'un ou plusieurs chiffres moins significatifs sont perdus ou modifiés au cours d'une conversion.
Implémentations d'interface
Ce type implémente les interfaces IComparable, IComparable, IFormattable et IConvertible. Pour les conversions, utilisez la classe Convert au lieu de l'implémentation du membre d'interface explicite de IConvertible de ce type.
ExempleL'exemple de code suivant montre comment utiliser Double :
' 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(Nothing).EndsWith("'F") Then temp.Value = Double.Parse(s.Remove(s.LastIndexOf("'"c), 2), styles, provider) Else If s.TrimEnd(Nothing).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
/// <summary> /// Temperature class stores the value as Double /// and delegates most of the functionality /// to the Double implementation. /// </summary> public class Temperature : IComparable, IFormattable { /// <summary> /// IComparable.CompareTo implementation. /// </summary> public int CompareTo(object obj) { if(obj is Temperature) { Temperature temp = (Temperature) obj; return m_value.CompareTo(temp.m_value); } throw new ArgumentException("object is not a Temperature"); } /// <summary> /// IFormattable.ToString implementation. /// </summary> public string ToString(string format, IFormatProvider provider) { if( format != null ) { if( format.Equals("F") ) { return String.Format("{0}'F", this.Value.ToString()); } if( format.Equals("C") ) { return String.Format("{0}'C", this.Celsius.ToString()); } } return m_value.ToString(format, provider); } /// <summary> /// Parses the temperature from a string in form /// [ws][sign]digits['F|'C][ws] /// </summary> public static Temperature Parse(string s, NumberStyles styles, IFormatProvider provider) { Temperature temp = new Temperature(); if( s.TrimEnd(null).EndsWith("'F") ) { temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider); } else if( s.TrimEnd(null).EndsWith("'C") ) { temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2), styles, provider); } else { temp.Value = Double.Parse(s, styles, provider); } return temp; } // The value holder protected double m_value; public double Value { get { return m_value; } set { m_value = value; } } public double Celsius { get { return (m_value-32.0)/1.8; } set { m_value = 1.8*value+32.0; } } }
/// <summary> /// Temperature class stores the value as Double /// and delegates most of the functionality /// to the Double implementation. /// </summary> public ref class Temperature: public IComparable, public IFormattable { /// <summary> /// IComparable.CompareTo implementation. /// </summary> public: virtual int CompareTo( Object^ obj ) { if ( dynamic_cast<Temperature^>(obj) ) { Temperature^ temp = (Temperature^)(obj); return m_value.CompareTo( temp->m_value ); } throw gcnew ArgumentException( "object is not a Temperature" ); } /// <summary> /// IFormattable.ToString implementation. /// </summary> virtual String^ ToString( String^ format, IFormatProvider^ provider ) { if ( format != nullptr ) { if ( format->Equals( "F" ) ) { return String::Format( "{0}'F", this->Value.ToString() ); } if ( format->Equals( "C" ) ) { return String::Format( "{0}'C", this->Celsius.ToString() ); } } return m_value.ToString( format, provider ); } /// <summary> /// Parses the temperature from a string in form /// [ws][sign]digits['F|'C][ws] /// </summary> static Temperature^ Parse( String^ s, NumberStyles styles, IFormatProvider^ provider ) { Temperature^ temp = gcnew Temperature; if ( s->TrimEnd( 0 )->EndsWith( "'F" ) ) { temp->Value = Double::Parse( s->Remove( s->LastIndexOf( '\'' ), 2 ), styles, provider ); } else if ( s->TrimEnd( 0 )->EndsWith( "'C" ) ) { temp->Celsius = Double::Parse( s->Remove( s->LastIndexOf( '\'' ), 2 ), styles, provider ); } else { temp->Value = Double::Parse( s, styles, provider ); } return temp; } protected: // The value holder double m_value; public: property double Value { double get() { return m_value; } void set( double value ) { m_value = value; } } property double Celsius { double get() { return (m_value - 32.0) / 1.8; } void set( double value ) { m_value = 1.8 * value + 32.0; } } };
/// <summary> /// Temperature class stores the value as Double /// and delegates most of the functionality /// to the Double implementation. /// </summary> public class Temperature implements IComparable, IFormattable { /// <summary> /// IComparable.CompareTo implementation. /// </summary> public function CompareTo(obj) : int{ if(obj.GetType() == Temperature) { var temp : Temperature = Temperature(obj); return m_value.CompareTo(temp.m_value); } throw new ArgumentException("object is not a Temperature"); } /// <summary> /// IFormattable.ToString implementation. /// </summary> public function ToString(format : String, provider : IFormatProvider) : String { if( format != null ) { if( format.Equals("F") ) { return String.Format("{0}'F", this.Value.ToString()); } if( format.Equals("C") ) { return String.Format("{0}'C", this.Celsius.ToString()); } } return m_value.ToString(format, provider); } /// <summary> /// Parses the temperature from a string in form /// [ws][sign]digits['F|'C][ws] /// </summary> public static function Parse(s : String, styles : NumberStyles, provider : IFormatProvider) : Temperature{ var temp : Temperature = 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 var m_value : double; public function get Value() : double{ return m_value; } public function set Value(value : double) { m_value = value; } public function get Celsius() : double { return (m_value-32.0)/1.8; } public function set Celsius(value : double) { m_value = 1.8*value+32.0; } }
Sécurité des threads
Plates-formesWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
Informations de version
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ