對於一些跟錢有關的系統,在數字的計算上要特別小心。在程式設計上,一個變數能存的數目是有範圍的,不可能是無限大,所以會有所謂溢位的問題。
例如下列程式碼:
int intA = int.MaxValue;
int intB = intA + 1;
Console.WriteLine(intB);
執行結果。
很明顯的,如果不特別檢查,一旦超過儲存範圍,就會有非預期的值。好在對於整數的檢查,C# 提供 checked 關鍵字。
下列程式碼會檢查整數是否溢位,一旦有溢位的情形,就會丟出 exception。
try
{
int intA = int.MaxValue;
int intB = checked(intA + 1);
Console.WriteLine(intB);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
執行結果。
另外,也可以宣告 checked 區塊,如果區塊內有任何整數發生溢位的情況,也會丟出 exception。
try
{
checked
{
byte byteA = byte.MaxValue;
byte byteB = 2;
byte byteC = (byte)(byteA + byteB);
Console.WriteLine(byteC);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
另外,checked() 內如果放入 byte 型別的變數,編譯是不會過的,所以建議使用 checked 區塊,在程的撰寫上也比較方便。
文章標籤
全站熱搜
