我在檢測兩個數的和/乘是否超過長整數的最大值時遇到問題。
示例代碼:java數量超過long.max_value - 如何檢測?
long a = 2 * Long.MAX_VALUE;
System.out.println("long.max * smth > long.max... or is it? a=" + a);
這讓我-2
,而我希望它拋出一個NumberFormatException
...
有使這項工作的一個簡單的方法?因爲我有一些代碼可以在嵌套的IF塊中進行乘法運算,或者在循環中進行加法運算,所以我不願意爲每個IF或循環內部添加更多的IF。
編輯:哦,好像是從另一個問題,這個答案是最適合我的需要:https://stackoverflow.com/a/9057367/540394
我不想做裝箱/拆箱,因爲它增加unnecassary開銷,這種方式是非常總之,這對我來說是一個巨大的優勢。我只寫兩個簡短的函數來完成這些檢查並返回最小或最大長度。
EDIT2:這裏是根據我聯繫上面的答案限長到它的最小值/最大值功能:
/**
* @param a : one of the two numbers added/multiplied
* @param b : the other of the two numbers
* @param c : the result of the addition/multiplication
* @return the minimum or maximum value of a long integer if addition/multiplication of a and b is less than Long.MIN_VALUE or more than Long.MAX_VALUE
*/
public static long limitLong(long a, long b, long c)
{
return (((a > 0) && (b > 0) && (c <= 0))
? Long.MAX_VALUE
: (((a < 0) && (b < 0) && (c >= 0)) ? Long.MIN_VALUE : c));
}
告訴我,如果你認爲這是錯誤的。
+1。應該有一些允許整數溢出檢測的庫。 – Thilo
或者特殊塊(類似finally?),它可以幫助開發人員爲所有在其中執行的數學代碼啓用溢出錯誤行爲。我相信C#有一個。編輯:找到它,[在C#中選中和未選中的塊](http://msdn.microsoft.com/zh-cn/library/a569z7k8.aspx)。 –
那麼,C#似乎拋出溢出錯誤(我非常喜歡沉默和錯誤的結果,對我來說沒有意義)... – jurchiks