相关疑难解决方法(0)

Double.MaxValue到整数是否定的?

为什么Double.MaxValue转换为整数类型会产生负值,即该类型的最小值?

double maxDouble = double.MaxValue;       // 1.7976931348623157E+308
long maxDoubleLong = (long) maxDouble;    // -9223372036854775808
Run Code Online (Sandbox Code Playgroud)

我理解编译器错误,如果它太大或OverflowException在运行时或者如果我使用unchecked转换可能不会抛出异常,但结果变得不确定和不正确(负).

同样奇怪的是,价值是long.MinValue:

bool sameAsLongMin = maxDoubleLong == long.MinValue; // true
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果我把它投射到同样的情况int:

int maxDoubleInt = (int)maxDouble;                   // -2147483648
bool sameAsIntMin = maxDoubleInt == int.MinValue;    // true
Run Code Online (Sandbox Code Playgroud)

如果它试图将它转换为decimalOverflowException在运行时获得

decimal maxDoubleDec = (decimal)maxDouble;  // nope
Run Code Online (Sandbox Code Playgroud)

更新:似乎迈克尔和巴雷的答案在头上钉了一针,如果我checked明确使用我得到一个OverflowException:

checked
{
    double maxDouble = double.MaxValue;     // 1.7976931348623157E+308
    long maxDoubleLong = (long) maxDouble;  // …
Run Code Online (Sandbox Code Playgroud)

.net c# casting type-conversion

23
推荐指数
2
解决办法
4825
查看次数

标签 统计

.net ×1

c# ×1

casting ×1

type-conversion ×1