이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
MSDN Library
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Double 구조체

2013-12-13

배정밀도 부동 소수점 숫자를 나타냅니다.

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

public struct Double : IComparable, IComparable<double>, 
	IConvertible, IEquatable<double>, IFormattable

Double 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드CompareTo(Double)이 인스턴스를 지정된 배정밀도 부동 소수점 숫자와 비교하고 이 인스턴스의 값이 지정된 배정밀도 부동 소수점 숫자 값보다 작은지, 같은지 또는 큰지를 나타내는 정수를 반환합니다.
Public 메서드CompareTo(Object)이 인스턴스를 지정된 개체와 비교하고 이 인스턴스의 값이 지정된 개체의 값보다 작은지, 같은지 또는 큰지를 나타내는 정수를 반환합니다.
Public 메서드Equals(Double)이 인스턴스의 값과 지정된 Double 개체의 값이 같은지 여부를 나타내는 값을 반환합니다.
Public 메서드Equals(Object)이 인스턴스가 지정한 개체와 같은지 여부를 나타내는 값을 반환합니다. (ValueType.Equals(Object)을(를) 재정의함)
Protected 메서드Finalize가비지 수집기에서 Object를 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드GetHashCode해당 인스턴스에 대한 해시 코드를 반환합니다. (ValueType.GetHashCode()을(를) 재정의함)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드GetTypeCodeDouble 값 형식에 대한 TypeCode를 반환합니다.
Public 메서드정적 멤버IsInfinity지정된 숫자가 음의 무한대로 계산되는지 양의 무한대로 계산되는지를 나타내는 값을 반환합니다.
Public 메서드정적 멤버IsNaN지정된 숫자가 Not-a-Number(NaN)로 계산되는지 여부를 나타내는 값을 반환합니다.
Public 메서드정적 멤버IsNegativeInfinity지정된 숫자가 음의 무한대로 계산되는지를 나타내는 값을 반환합니다.
Public 메서드정적 멤버IsPositiveInfinity지정된 숫자가 양의 무한대로 계산되는지를 나타내는 값을 반환합니다.
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드정적 멤버Parse(String)숫자의 문자열 표현을 같은 값의 배정밀도 부동 소수점 숫자로 변환합니다.
Public 메서드정적 멤버Parse(String, NumberStyles)지정된 스타일의 숫자에 대한 문자열 표현을 해당하는 배정밀도 부동 소수점 숫자로 변환합니다.
Public 메서드정적 멤버Parse(String, IFormatProvider)지정된 문화권별 형식의 숫자에 대한 문자열 표현을 해당하는 배정밀도 부동 소수점 숫자로 변환합니다.
Public 메서드정적 멤버Parse(String, NumberStyles, IFormatProvider)지정된 스타일 및 문화권별 형식의 숫자에 대한 문자열 표현을 같은 값의 배정밀도 부동 소수점 숫자로 변환합니다.
Public 메서드ToString()이 인스턴스의 숫자 값을 해당하는 문자열 표현으로 변환합니다. (ValueType.ToString()을(를) 재정의함)
Public 메서드ToString(IFormatProvider)지정된 문화권별 형식 정보를 사용하여 이 인스턴스의 숫자 값을 해당 문자열 표현으로 변환합니다.
Public 메서드ToString(String)지정된 형식을 사용하여 이 인스턴스의 숫자 값을 해당 문자열 표현으로 변환합니다.
Public 메서드ToString(String, IFormatProvider)지정된 형식 및 문화권별 형식 정보를 사용하여 이 인스턴스의 숫자 값을 해당 문자열 표현으로 변환합니다.
Public 메서드정적 멤버TryParse(String, Double)숫자의 문자열 표현을 같은 값의 배정밀도 부동 소수점 숫자로 변환합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다.
Public 메서드정적 멤버TryParse(String, NumberStyles, IFormatProvider, Double)지정된 스타일 및 문화권별 형식의 숫자에 대한 문자열 표현을 같은 값의 배정밀도 부동 소수점 숫자로 변환합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다.
맨 위

  이름설명
Public 연산자정적 멤버Equality지정된 두 Double 값이 같은지 여부를 나타내는 값을 반환합니다.
Public 연산자정적 멤버GreaterThan지정된 Double 값이 지정된 다른 Double 값보다 큰지 여부를 나타내는 값을 반환합니다.
Public 연산자정적 멤버GreaterThanOrEqual지정된 Double 값이 지정된 다른 Double 값보다 크거나 같은지 여부를 나타내는 값을 반환합니다.
Public 연산자정적 멤버Inequality지정된 두 Double 값이 같지 않은지 여부를 나타내는 값을 반환합니다.
Public 연산자정적 멤버LessThan지정된 Double 값이 지정된 다른 Double 값보다 작은지 여부를 나타내는 값을 반환합니다.
Public 연산자정적 멤버LessThanOrEqual지정된 Double 값이 지정된 다른 Double 값보다 작거나 같은지 여부를 나타내는 값을 반환합니다.
맨 위

  이름설명
Public 필드정적 멤버Epsilon0보다 큰 양의 최소 Double 값을 나타냅니다. 이 필드는 상수입니다.
Public 필드정적 멤버MaxValueDouble의 최대값을 나타냅니다. 이 필드는 상수입니다.
Public 필드정적 멤버MinValueDouble의 최소값을 나타냅니다. 이 필드는 상수입니다.
Public 필드정적 멤버NaNNaN(Not-a-Number)을 나타냅니다. 이 필드는 상수입니다.
Public 필드정적 멤버NegativeInfinity음의 무한대를 나타냅니다. 이 필드는 상수입니다.
Public 필드정적 멤버PositiveInfinity양의 무한대를 나타냅니다. 이 필드는 상수입니다.
맨 위

  이름설명
명시적 인터페이스 구현Private 메서드IConvertible.ToBoolean인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToBoolean을 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToByte인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToByte를 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToChar인프라입니다. 이 변환이 지원되지 않습니다. 이 메서드를 사용하려고 하면 InvalidCastException이 발생합니다.
명시적 인터페이스 구현Private 메서드IConvertible.ToDateTime인프라입니다. 이 변환이 지원되지 않습니다. 이 메서드를 사용하려고 하면 InvalidCastException이 발생합니다.
명시적 인터페이스 구현Private 메서드IConvertible.ToDecimal인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToDecimal을 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToDouble인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToDouble을 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToInt16인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToInt16을 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToInt32인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToInt32를 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToInt64인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToInt64를 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToSByte인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToSByte를 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToSingle인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToSingle을 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToType인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToType를 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToUInt16인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToUInt16을 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToUInt32인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToUInt32를 참조하세요.
명시적 인터페이스 구현Private 메서드IConvertible.ToUInt64인프라입니다. 이 멤버에 대한 설명은 IConvertible.ToUInt64를 참조하세요.
맨 위

Double 값 형식은 배정밀도 64비트 숫자를 나타내며, 음수 1.79769313486232e308과 양수 1.79769313486232e308 사이의 값을 가지고, 양수 또는 음수 0, PositiveInfinity, NegativeInfinity 및 Not-a-Number(NaN)도 포함됩니다.

Double은 이진 부동 소수점 산술 연산에 대한 IEC 60559:1989(IEEE 754) 표준을 따릅니다.

Double은 이 형식의 인스턴스를 비교하고 인스턴스의 값을 문자열 표현으로 변환하며 숫자의 문자열 표현을 이 형식의 인스턴스로 변환하는 메서드를 제공합니다. 형식 사양 코드로 값 형식의 문자열 표현을 제어하는 방법에 대한 자세한 내용은 [0d1364da-5b30-4d42-8e6b-03378343343f], [580e57eb-ac47-4ffd-bccd-3a1637c2f467][6f74fd32-6c6b-48ed-8241-3c2b86dea5f4]을 참조하세요.

부동 소수점 숫자 사용

이진 연산을 수행할 때 피연산자 중 하나가 Double이면 다른 피연산자는 정수 계열 형식이거나 부동 소수점 형식(Double 또는 Single)이어야 합니다. 다른 피연산자가 Double이 아니면 연산을 수행하기 전에 Double로 변환되고 최소의 Double 범위와 정밀도를 사용하여 연산이 수행됩니다. 연산 결과가 숫자이면 결과 형식은 Double입니다.

대입 연산자를 포함하여 부동 소수점 연산자는 예외를 발생하지 않습니다. 대신 예외 상황이 발생하면 부동 소수점 연산의 결과는 아래 설명에서처럼 0, 무한대 또는 NaN입니다.

  • 부동 소수점 연산의 결과가 대상 형식에 비해 너무 작으면 연산 결과는 0입니다.

  • 부동 소수점 연산의 결과가 대상 형식에 비해 너무 크면 연산 결과는 결과의 부호에 따라 PositiveInfinity 또는 NegativeInfinity입니다.

  • 부동 소수점 연산이 잘못되었으면 연산 결과는 NaN입니다.

  • 부동 소수점 연산의 피연산자 중 하나 또는 모두가 NaN이면 연산 결과는 NaN입니다.

부동 소수점 값 및 정밀도 손실

부동 소수점 숫자는 10진수를 대략적으로만 나타낼 수 있으며 부동 소수점 숫자의 전체 자릿수에 따라 10진수의 근사값인 해당 값의 정밀도가 달라집니다. 내부적으로는 최대 17자리의 정밀도를 유지 관리하지만 Double 값은 기본적으로 15자리를 포함합니다. 부동 소수점 숫자의 자릿수에 따라 다음과 같은 여러 경우가 발생합니다.

  • 특정 정밀도에 대해 동일하게 나타나는 두 개의 부동 소수점 숫자는 최소 유효 자릿수가 다르기 때문에 서로 다른 것으로 간주될 수 있습니다.

  • 부동 소수점 숫자를 사용하는 수학 연산이나 비교 연산에서는 부동 소수점 숫자로 10진수를 정확하게 나타낼 수 없기 때문에 10진수가 사용되는 경우 동일한 결과를 생성하지 않을 수 있습니다.

  • 부동 소수점 숫자가 포함된 경우 값에 라운드트립이 발생하지 않을 수 있습니다. 연산에서 원래 부동 소수점 숫자를 다른 형식으로 변환하고, 역 연산에서 변환된 형식을 다시 부동 소수점 숫자로 변환하며, 최종 부동 소수점 숫자가 원래 부동 소수점 숫자와 같으면 해당 값을 라운드트립 값이라고 합니다. 변환할 때 하나 이상의 최소 유효 자릿수가 손실되거나 변경되기 때문에 라운드트립이 실패할 수 있습니다.

또한 Double 값을 사용한 산술 및 할당 연산의 결과는 Double 형식의 전체 자릿수 손실로 인해 플랫폼마다 약간씩 다를 수 있습니다.

인터페이스 구현

이 형식은 IComparable, IComparable<T>, IFormattableIConvertible 인터페이스를 구현합니다. 변환을 위해 이 형식의 IConvertible 명시적 인터페이스 멤버 구현 대신 Convert 클래스를 사용합니다.

Double 값 및 XAML 구문 분석

Double 값이 XAML 특성 값으로 처리되면, 이 값은 코드와 런타임에서 Double의 정의가 의미하는 전체 정밀도를 유지하지 않습니다. 이것은 XAML 파서 작업의 일부로 네이티브 코드가 사용되고 사용자 인터페이스에 적용할 수 있는 숫자 값이 의도적으로 최적화되기 때문입니다.

XAML에는 기본 속성 형식이 Double이지만, 예상되는 값이 0과 1.0 범위에 속하는 몇 개의 속성도 포함되어 있습니다. 이것은 일반적으로 해당 속성에 대한 참조 설명서에 언급되며, 종종 XAML 구문에도 언급됩니다. 이러한 속성의 예로는 UIElement.Opacity가 있습니다.

다음 예제에서는 Double를 사용하는 방법을 보여 줍니다.


// Temperature class stores the value as 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 (temp != 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 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;
      }
   }
}


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

이 형식의 모든 멤버는 스레드로부터 안전합니다. 인스턴스 상태를 수정하는 것처럼 보이는 멤버의 경우 실제로는 새 값으로 초기화되는 새 인스턴스를 반환합니다. 다른 모든 형식과 마찬가지로 이 형식의 인스턴스를 포함하는 공유 변수를 읽고 쓰는 작업은 스레드로부터 안전하도록 잠가서 보호해야 합니다.

주의주의:

이 형식의 인스턴스를 할당하는 경우 해당 인스턴스의 이진 표현이 너무 커서 단일 원자 연산에 할당되지 못할 수 있으므로 모든 하드웨어 플랫폼에서 스레드로부터 안전하지 않습니다.

표시:
© 2015 Microsoft