給定一個名爲sizeValue
的雙變量,並且sizeValue
包含除0以外的內容,那麼確定sizeValue
是否包含整數值的最有效方法是什麼?確定十進制值的最快有效方法是Java中的整數
我目前使用
sizeValue%1 == 0
任何其他更快的方法?
給定一個名爲sizeValue
的雙變量,並且sizeValue
包含除0以外的內容,那麼確定sizeValue
是否包含整數值的最有效方法是什麼?確定十進制值的最快有效方法是Java中的整數
我目前使用
sizeValue%1 == 0
任何其他更快的方法?
給一個嘗試Math.ceil:
private static boolean isInt(double x) {
return x == Math.ceil(x);
}
編輯
我已經做了一些基準以下方法:
private static boolean isInt1(double x) {
return x == (int) x;
}
private static boolean isInt2(double x) {
return x == Math.ceil(x);
}
private static boolean isInt3(double x) {
return x % 1 == 0;
}
isInt1
是他們的速度更快(上sunjre 1.6)
,我不知道這是任何更快,但你可以投你double到int和測試平等:
double d = 123.456;
boolean dIsAnInteger = (d == (int)d);
-1超過2^31時不起作用。使用long只會稍微錯誤一點。 – starblue 2009-10-16 05:27:10
警告:你會考慮0.9999999999999999
整數?可能不會。但是看這個:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
此打印出:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
這是個問題,因爲在程序val
結束包含您認爲應該是整數,但不是。
所以我會做我的方法有點通過整合增量像JUnit慢(但更正確的)作用:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
課程,並提供同樣的方法用一個合理的默認:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
現在isInt(val)
終於返回true。
這已經很快了。 – OscarRyz 2009-10-15 21:13:08