13

如果有的话,两者之间有什么区别?

decimal d = (decimal) myDouble;
decimal d = new decimal(myDouble);
decimal d = Convert.ToDecimal(myDouble);
4

3 回答 3

10

没有区别。如果您查看源代码:

十进制:

public static explicit operator decimal(double value)
{
    return new decimal(value);
}    

在转换中:

public static decimal ToDecimal(float value)
{
    return (decimal) value;
}

所以最后他们都打电话了new decimal(double)

于 2012-05-11T14:39:54.737 回答
5

他们都达到了相同的结果。但是,这里有一个更细分的解释:

  • 方法 1创建一个显式转换myDouble为 type的新变量decimal。当你进行转换时,你是在说,“这个 A 类型的对象实际上是 B-派生自 A 类型的对象,或者存在一个转换运算符来将 A 转换为 B。”

  • 方法 2创建一个新变量,该变量将通过构造函数重载转换myDouble为适当的类型 ( )。decimal当您调用构造函数时,您是在说“根据传递给构造函数的参数创建一个新对象”。

  • 方法 3将基本数据类型 ( double) 转换为另一种基本数据类型 ( decimal)。当你使用类似的东西时Convert.ToDecimal(),你是在说,“这个对象不是 B 类型的,但是有一种方法可以使它成为 B 类型的对象。”

关于ConvertMSDN 状态:

  • 存在一种将每种基本类型转换为其他所有基本类型的转换方法。但是,实际执行的转换操作分为三类:

  • 从类型到自身的转换只返回该类型。实际上不执行任何转换。

  • 无法产生有意义结果的转换将引发 InvalidCastException。实际上不执行任何转换。从 Char 到 Boolean、Single、Double、Decimal 或 DateTime 以及从这些类型到 Char 的转换会引发异常。从 DateTime 到除 String 之外的任何类型的转换以及从除 String 之外的任何类型到 DateTime 的转换都会引发异常。除上述类型外,任何基本类型都可以与任何其他基本类型相互转换。
于 2012-05-11T14:37:49.367 回答
3

实际上,从功能的角度来看,没有任何区别。这些是实现相同结果的不同方法。

重要的是,在Convert.ToDecimal的情况下,您可以指定格式 IFormatProvider(culture),因此您可以获得更大的灵活性。

如果您不关心多元文化环境,请选择您喜欢的任何一个。

于 2012-05-11T14:38:04.780 回答