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),这样您就可以获得更大的灵活性。
如果您不关心多元文化环境,请选择您喜欢的任何一种。
- Graphics.DrawString vs TextRenderer.DrawText?哪个可以提供更好的质量
- WCF REST WebChannelFactory客户端是否支持使用重定向的REST服务?
- .net XmlSerializer,忽略基类属性
- 互操作后Excel过程仍然保持打开状态; 传统方法不起作用
- c#字符串是引用类型 – 为什么当我更改引用A的值时,引用B不会改变?
- 不要在选择某些项目时关闭ContextMenuStrip
- 与嵌套子模型和ASP.NET MVC中的PartialViews进行模型绑定
- 将编译日期添加到代码
- 将Log4Net RollingFileAppender设置为每周滚动一次