Double 構造体
倍精度浮動小数点数を表します。
この型のすべてのメンバの一覧については、Double メンバ を参照してください。
System.Object
System.ValueType
System.Double
<Serializable>
Public Structure Double Implements IComparable, IFormattable, IConvertible
[C#]
[Serializable]
public struct Double : IComparable, IFormattable, IConvertible
[C++]
[Serializable]
public __value struct Double : public IComparable, IFormattable, IConvertible
[JScript] JScript では、.NET Framework の構造体を利用することができます。ただし、独自に定義することはできません。
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
Double 値型は、-1.79769313486232e308 から +1.79769313486232e308 までの倍精度 64 ビット数値、正の 0 または負の 0、 PositiveInfinity 、 NegativeInfinity 、および非数 (NaN) を表します。
Double は、2 進の浮動小数点演算に関する IEC 60559:1989 (IEEE 754) 規格に準拠しています。
Double は、この型の複数のインスタンスを比較したり、インスタンスの値を文字列形式に変換したり、数値の文字列形式をこの型のインスタンスに変換するためのメソッドを提供します。
書式指定コードで値型の文字列形式を制御する方法については、「 書式設定の概要 」を参照してください。
この型は、 IComparable 、 IFormattable インターフェイス、および IConvertible インターフェイスを実装します。この型の明示的な IConvertible インターフェイス メンバの実装の代わりに、 Convert クラスを使用します。
二項演算を実行するとき、一方のオペランドが Double である場合は、もう一方のオペランドは整数型または浮動小数点型 (Double または Single) である必要があります。もう一方のオペランドが Double でない場合は、二項演算を実行する前に Double に変換され、この演算は少なくとも Double の範囲および精度を使用して実行されます。演算結果が数値である場合、結果の型は Double になります。
浮動小数点演算子および代入演算子は、例外をスローしません。代わりに、例外状況での浮動小数点演算の結果は、次に説明するように 0、無限大、または NaN になります。
- 浮動小数点演算の結果が変換先形式に対して小さすぎる場合、演算結果は 0 になります。
- 浮動小数点演算の結果の絶対値が変換先形式に対して大きすぎる場合、演算結果は符号に応じて PositiveInfinity または NegativeInfinity になります。
- 浮動小数点演算が無効な場合、演算結果は NaN になります。
- 浮動小数点演算の一方または両方のオペランドが NaN の場合、演算結果は NaN になります。
使用例
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
[C#]
/// <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;
}
}
}
[C++]
/// <summary>
/// Temperature class stores the value as Double
/// and delegates most of the functionality
/// to the Double implementation.
/// </summary>
public __gc class Temperature : public IComparable, public IFormattable {
/// <summary>
/// IComparable.CompareTo implementation.
/// </summary>
public:
int CompareTo(Object* obj) {
if(dynamic_cast<Temperature*>(obj)) {
Temperature* temp = dynamic_cast<Temperature*> (obj);
return m_value.CompareTo(__box(temp->m_value));
}
throw new ArgumentException(S"object is not a Temperature");
}
/// <summary>
/// IFormattable.ToString implementation.
/// </summary>
String* ToString(String* format, IFormatProvider* provider) {
if( format != 0 ) {
if( format->Equals(S"F") ) {
return String::Format(S"{0}'F", this->Value.ToString());
}
if( format->Equals(S"C") ) {
return String::Format(S"{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 = new Temperature();
if( s->TrimEnd(0)->EndsWith(S"'F") ) {
temp->Value = Double::Parse( s->Remove(s->LastIndexOf('\''), 2), styles, provider);
}
else if( s->TrimEnd(0)->EndsWith(S"'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:
__property double get_Value() {
return m_value;
}
__property void set_Value( double value ) {
m_value = value;
}
__property double get_Celsius() {
return (m_value-32.0)/1.8;
}
__property void set_Celsius( double value ) {
m_value = 1.8*value+32.0;
}
};
[JScript]
/// <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;
}
}
必要条件
名前空間: System
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)