爲什麼Double.MaxValue
鑄成一個整數類型會導致負值,即該類型的最小值?Double.MaxValue爲整數是負數?
double maxDouble = double.MaxValue; // 1.7976931348623157E+308
long maxDoubleLong = (long) maxDouble; // -9223372036854775808
我明白一個編譯錯誤,如果它太大或OverflowException
在運行時,或者如果我會用unchecked
,該轉換可能不會拋出異常,但結果是不確定的和不正確(負)。
而且奇怪的是,該值是long.MinValue
:
bool sameAsLongMin = maxDoubleLong == long.MinValue; // true
順便說一句,同樣的情況,如果我將它轉換爲int
:
int maxDoubleInt = (int)maxDouble; // -2147483648
bool sameAsIntMin = maxDoubleInt == int.MinValue; // true
如果嘗試將其轉換爲decimal
我在運行時得到一個OverflowException
decimal maxDoubleDec = (decimal)maxDouble; // nope
更新:看來,邁克爾和巴里的回答一針見血的頭,如果我使用checked
明確我得到一個OverflowException
:
checked
{
double maxDouble = double.MaxValue; // 1.7976931348623157E+308
long maxDoubleLong = (long) maxDouble; // nope
}
您在代碼註釋中有一個減號後面帶有'maxDoubleInt'的行。 –