导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Double 结构

2013/12/13

表示双精度浮点数。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

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

Double 类型公开以下成员。

  名称说明
公共方法CompareTo(Double)将此实例与指定的双精度浮点数进行比较,并返回一个整数,该整数指示此实例的值是小于、等于还是大于指定双精度浮点数的值。
公共方法CompareTo(Object)将此实例与指定对象进行比较,并返回一个整数,该整数指示此实例的值是小于、等于还是大于指定对象的值。
公共方法Equals(Double)返回一个值,该值指示此实例和指定的 Double 对象是否表示相同的值。
公共方法Equals(Object)返回一个值,该值指示此实例是否等于指定的对象。 (重写 ValueType.Equals(Object)。)
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法GetHashCode返回此实例的哈希代码。 (重写 ValueType.GetHashCode()。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
公共方法GetTypeCode返回值类型 DoubleTypeCode
公共方法静态成员IsInfinity返回一个值,该值指示指定数字是计算为负无穷大还是正无穷大。
公共方法静态成员IsNaN返回一个值,该值指示指定数字的计算结果是否为不是数字 (NaN) 的值。
公共方法静态成员IsNegativeInfinity返回一个值,该值指示指定数字是否计算为负无穷大。
公共方法静态成员IsPositiveInfinity返回一个值,该值指示指定数字是否计算为正无穷大。
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法静态成员Parse(String)将数字的字符串表示形式转换为它的等效双精度浮点数。
公共方法静态成员Parse(String, NumberStyles)将指定样式的数字的字符串表示形式转换为它的等效双精度浮点数。
公共方法静态成员Parse(String, IFormatProvider)将指定的区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。
公共方法静态成员Parse(String, NumberStyles, IFormatProvider)将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。
公共方法ToString()将此实例的数值转换为其等效的字符串表示形式。 (重写 ValueType.ToString()。)
公共方法ToString(IFormatProvider)使用指定的区域性特定格式设置信息,将此实例的数值转换为它的等效字符串表示形式。
公共方法ToString(String)使用指定的格式,将此实例的数值转换为它的等效字符串表示形式。
公共方法ToString(String, IFormatProvider)使用指定的格式和区域性特定格式设置信息,将此实例的数值转换为它的等效字符串表示形式。
公共方法静态成员TryParse(String, Double)将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。
公共方法静态成员TryParse(String, NumberStyles, IFormatProvider, Double)将指定样式和区域性特定格式的数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。
返回顶部

  名称说明
公共运算符静态成员Equality返回一个值,该值指示两个指定的 Double 值是否相等。
公共运算符静态成员GreaterThan返回一个值,该值指示指定的 Double 值是否大于另一个指定的 Double 值。
公共运算符静态成员GreaterThanOrEqual返回一个值,该值指示指定的 Double 值是否大于或等于另一个指定的 Double 值。
公共运算符静态成员Inequality返回一个值,该值指示两个指定的 Double 值是否不相等。
公共运算符静态成员LessThan返回一个值,该值指示指定的 Double 值是否小于另一个指定的 Double 值。
公共运算符静态成员LessThanOrEqual返回一个值,该值指示指定的 Double 值是否小于或等于另一个指定的 Double 值。
返回顶部

  名称说明
公共字段静态成员Epsilon表示大于零的最小正 Double 值。此字段为常量。
公共字段静态成员MaxValue表示 Double 的最大可能值。此字段为常量。
公共字段静态成员MinValue表示 Double 的最小可能值。此字段为常量。
公共字段静态成员NaN表示不是数字 (NaN) 的值。此字段为常量。
公共字段静态成员NegativeInfinity表示负无穷。此字段为常量。
公共字段静态成员PositiveInfinity表示正无穷。此字段为常量。
返回顶部

  名称说明
显式接口实现私有方法IConvertible.ToBoolean基础结构。 有关此成员的说明,请参见 IConvertible.ToBoolean
显式接口实现私有方法IConvertible.ToByte基础结构。 有关此成员的说明,请参见 IConvertible.ToByte
显式接口实现私有方法IConvertible.ToChar基础结构。 不支持此转换。尝试使用此方法将引发 InvalidCastException
显式接口实现私有方法IConvertible.ToDateTime基础结构。 不支持此转换。尝试使用此方法将引发 InvalidCastException
显式接口实现私有方法IConvertible.ToDecimal基础结构。 有关此成员的说明,请参见 IConvertible.ToDecimal
显式接口实现私有方法IConvertible.ToDouble基础结构。 有关此成员的说明,请参见 IConvertible.ToDouble
显式接口实现私有方法IConvertible.ToInt16基础结构。 有关此成员的说明,请参见 IConvertible.ToInt16
显式接口实现私有方法IConvertible.ToInt32基础结构。 有关此成员的说明,请参见 IConvertible.ToInt32
显式接口实现私有方法IConvertible.ToInt64基础结构。 有关此成员的说明,请参见 IConvertible.ToInt64
显式接口实现私有方法IConvertible.ToSByte基础结构。 有关此成员的说明,请参见 IConvertible.ToSByte
显式接口实现私有方法IConvertible.ToSingle基础结构。 有关此成员的说明,请参见 IConvertible.ToSingle
显式接口实现私有方法IConvertible.ToType基础结构。 有关此成员的说明,请参见 IConvertible.ToType
显式接口实现私有方法IConvertible.ToUInt16基础结构。 有关此成员的说明,请参见 IConvertible.ToUInt16
显式接口实现私有方法IConvertible.ToUInt32基础结构。 有关此成员的说明,请参见 IConvertible.ToUInt32
显式接口实现私有方法IConvertible.ToUInt64基础结构。 有关此成员的说明,请参见 IConvertible.ToUInt64
返回顶部

Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字,以及 +0 或 -0、PositiveInfinityNegativeInfinity 和非数字 (NaN)。

Double 符合二进制浮点算法的 IEC 60559:1989 (IEEE 754) 标准。

Double 为比较此类型的实例,将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息,请参见[0d1364da-5b30-4d42-8e6b-03378343343f][580e57eb-ac47-4ffd-bccd-3a1637c2f467][6f74fd32-6c6b-48ed-8241-3c2b86dea5f4]

使用浮点数

在执行二进制运算时,如果其中一个操作数为 Double,那么另一个操作数必须是整数类型或浮点类型(DoubleSingle)。在执行运算之前,如果另一个操作数不是 Double,应将其转换为 Double,并且至少要使用 Double 的范围和精度来执行运算。如果此运算得到一个数字结果,则结果的类型为 Double

浮点运算符(包括赋值运算符)不会引发异常。在异常情况下,浮点运算的结果为零、无穷或 NaN,如下所述:

  • 如果浮点运算的结果对于目标格式来说太小,则运算的结果为零。

  • 如果浮点运算结果的数值对于目标格式来说太大,则运算的结果为 PositiveInfinityNegativeInfinity(具体取决于结果的符号)。

  • 如果浮点运算无效,则运算的结果为 NaN

  • 如果浮点运算的一个或两个操作数为 NaN,则运算的结果为 NaN

浮点值和精度损失

请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。浮点数的精度有几种结果:

  • 特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。

  • 由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。

  • 如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改,往返可能会失败。

此外,由于 Double 类型的精度损失,使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。

接口实现

此类型实现接口 IComparableIComparable<T>IFormattableIConvertible。使用 Convert 类进行转换,而不是使用此类型的 IConvertible 显式接口成员实现。

双精度值和 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