C#转换为小数

Ada*_*m A 11 .net c# double casting decimal

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

decimal d = (decimal) myDouble;
decimal d = new decimal(myDouble);
decimal d = Convert.ToDecimal(myDouble);
Run Code Online (Sandbox Code Playgroud)

MgS*_*Sam 8

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

在十进制:

public static explicit operator decimal(double value)
{
    return new decimal(value);
}    
Run Code Online (Sandbox Code Playgroud)

在转换中:

public static decimal ToDecimal(float value)
{
    return (decimal) value;
}
Run Code Online (Sandbox Code Playgroud)

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

  • @phoog这两者没有区别.没有"内置"双倍到十进制转换运算符,答案中提供的第一个方法是被调用的方法.您提供的第一种方式只是调用第二种方式,即在调用树中提供一种方法. (2认同)

Dar*_*ren 5

他们都取得了相同的结果。然而,这里有一个更详细的解释:

  • 方法 1创建一个显式转换myDouble为 type 的新变量decimal。当你进行强制转换时,你是在说:“这个 A 类型的对象实际上是 A 派生的 B 类型的对象,或者存在将 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 的转换都会引发异常。除上述类型之外的任何基本类型都可以与任何其他基本类型相互转换。