嘗試獲取float.MaxValue的整數部分,但它是拋出錯誤?Casting float.MaxValue to Long引發異常?
long l = Convert.ToInt64(float.MaxValue);
Console.WriteLine(l);
錯誤: 算術運算導致溢出。
嘗試獲取float.MaxValue的整數部分,但它是拋出錯誤?Casting float.MaxValue to Long引發異常?
long l = Convert.ToInt64(float.MaxValue);
Console.WriteLine(l);
錯誤: 算術運算導致溢出。
float
的最大值是3.4E + 38,而long
的最大值是9.2E + 18。因此,float.MaxValue
將不適合long
。
的Convert.ToInt64
方法,當你指定的值大於Int64.MaxValue
或小於Int64.MinValue
如果你只是想獲得的float.MaxValue
的整數值,請參閱相關答案this question拋出OverflowException
。但請注意,即使刪除了浮點數,float
的最大值仍將不適合long
數據類型。
編輯:一個float
(一個32位的值)具有比long
(64位值)更高的最大值的原因是,因爲浮點數在內部由計算機所表示的方式。浮點值類型可以容納比定點和整數類型更寬的值範圍,儘管這個更大的範圍是以犧牲精度爲代價來實現的。
Notice also that there is no implicit conversion from floating-point types to long.
雖然float
是一個較小的(4個字節)的結構比long
(8字節)是,它有一個較寬的範圍。 (編輯:在回答「爲什麼」,你可能需要閱讀What Every Computer Scientist Should Know About Floating-Point Arithmetic不像大多數的積分類型,其範圍不等於2 ^位。)
float.MaxValue ~= 3.402823+e38
long.MaxValue ~= 9.223372+e18
顯然,float.MaxValue
的組成部分,可以」 t表示爲long
。 (不要緊,因爲要求這麼大的單精度浮點數的精度通常是完全沒有意義的)。
現在,你可以嘗試使用System.Numerics.BigInteger
這裏(用appropriate constructor),如果你真的想與整型來表示這一點,但沒有進一步的信息我會認真懷疑你有真正需要這樣的大整數運算數字。
如果你需要的是顯示定點符號數,你可以使用相應的format-specifier:
//output: "340282300000000000000000000000000000000"
Console.WriteLine(float.MaxValue.ToString("F0"));
你可以使用的TryParse方法上的Int64。如果失敗,則只需使用浮點數的整數部分:
Int64.Parse(s.Substring(s.IndexOf(「。」)+ 1));
在.Net 4中有一個新的BigInteger類型可以處理這個數字的大小。
我只想要int32或int64中的float.MaxValue的整數部分。 – Lalit 2010-11-20 12:07:25
感謝所有,只是好奇浮動可以如何更大,然後int32,都使用32位。 float:32位而int32:32bit – Lalit 2010-11-20 12:22:17
請參閱我編輯的答案。 – 2010-11-20 12:26:08