C# 强制转换为小数

本文关键字:小数 转换 | 更新日期: 2023-09-27 18:33:57

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

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

C# 强制转换为小数

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

十进制:

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 的对象实际上是从 A 派生的 B 类型的对象,或者存在一个转换运算符来将 A 强制转换为 B。

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

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

关于Convert MSDN声明:

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

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

  • 无法产生有意义结果的转换将引发 InvalidCastException。实际上不执行转换。对于从 Char 到布尔值、单精度、双精度、十进制或日期时间的转换,以及从这些类型到 Char 的转换,将引发异常。从 DateTime 转换为除字符串之外的任何类型以及从除字符串之外的任何类型转换为日期时间时,将引发异常。除上述类型外,任何基本类型都可以与任何其他基本类型相互转换。

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

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

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