C#转换为小数

什么,如果有的话,是什么区别?

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

没有区别。 如果你看一下来源:

在十进制:

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

在转换中:

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

所以最后他们都调用了new decimal(double)

他们都取得了相同的结果。 但是,这是一个更细分的解释:

  • 方法1创建一个新变量,显式地将myDouble强制转换为decimal类型。 当你施放时,你会说, “A类型的这个对象实际上是B-derived-from-A类型的对象,或者存在一个将A转换为B的转换运算符。”

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

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

关于Convert MSDN状态:

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

  • 从类型到自身的转换只返回该类型。 实际上没有进行转换。

  • 无法产生有意义结果的转换会抛出InvalidCastException。 实际上没有进行转换。 从Char到Boolean,Single,Double,Decimal或DateTime以及从这些类型到Char的转换都会引发exception。 从DateTime到除String之外的任何类型以及从除String之外的任何类型到DateTime的转换都会引发exception。 除上述类型之外的任何基类型都可以转换为任何其他基类型。

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

重要的是,如果是Convert.ToDecimal ,您可以指定格式IFormatProvider(culture),这样您就可以获得更大的灵活性。

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