c# - 将 double 转换为 decimal 还是从 double 构造 "new"decimal 更好?

标签 c# .net casting double decimal

当从 double 转换为小数时,假设我的double 可以表示为decimal...

将 double 转换为小数是否更合适:
( Explicit Numeric Conversions Table )(请注意,此条目错误地与前者相矛盾!)

double foo = bar;
decimal foobar = (decimal)foo;

还是调用decimal构造函数更合适:
( Decimal Constructor )

double foo = bar;
decimal foobar = new decimal(foo);

我倾向于使用 decimal 构造函数,但我想知道使用其中一个与另一个的原因。

据我所知,唯一的区别是 Decimal.MinValue 下面的 double 的显式转换返回零,而使用构造函数会抛出 OverflowException

编辑:@Joren 在下面的评论中指出,对于较小的值,转换也会抛出 OverflowException ......所以显然 MSDN 文档是不正确的。

相关问题:
- C# cast a double variable to decimal
- Automatically cast from double to decimal safely: Is the following safe?

最佳答案

真的没有区别。使用 ILSpy:

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

基于使用 LINQPad 检查 IL,运算符重载在 C# 中的已检查和未检查上下文中的调用方式相同。

在 Visual Basic 中,CDec([double]) 和 CType([double],Decimal) 直接调用构造函数,因此在这方面没有区别,但转换更能够参与编译时常量折叠比构造函数。

关于c# - 将 double 转换为 decimal 还是从 double 构造 "new"decimal 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248662/

相关文章:

c# - JSON反序列化——String自动转为Int

c# - 使用like的sql select查询

java - 将 List<Son> 转换为 List<Father>

c++ - 有人可以解释这种语法吗? T (&arr)[arrsize] 与 T&arr[arrsize]

c# - 如何获取自动完成功能,不仅搜索开头,还使用包含,例如包含 "Doors"

c# - 将用户名/密码传递给 SmtpClient (.NET) 的正确方法

c# - 限制线程池线程数

c# - 在 Store C# 中按哈希查找证书

.net - 如何将 IQueryable<Something> 作为 IQueryable<ISomething> 返回

c++ - 此指针类型转换符号的含义