2 つの数値の合計/乗算が長整数の最大値を超えているかどうかを検出する際に問題があります。
コード例:
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
、そしてこの道は非常に短いので、私にとって大きなプラスです。これらのチェックを実行し、最小または最大の長さを返す 2 つの短い関数を記述します。
Edit2:上でリンクした回答に従って、 long を最小/最大値に制限する関数は次のとおりです。
/**
* @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));
}
これが間違っていると思うか教えてください。