Cảnh báo: bạn sẽ xem xét 0.9999999999999999
một số nguyên? Chắc là không. Nhưng xem này:
double val = 0;
for(int i=0;i<10;i++)
System.out.println(val+=0.1);
này in ra:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
Đó là vấn đề bởi vì ở phần cuối của chương trình val
chứa một cái gì đó mà bạn nghĩ rằng nên số nguyên nhưng không phải vậy.
Vì vậy, tôi muốn làm cho phương pháp của tôi chậm hơn một chút (nhưng đúng hơn) bằng cách tích hợp một vùng châu thổ như JUnit làm:
private static boolean isInt(double x, double delta) {
double ceil = Math.ceil(x);
return x-delta<ceil && x+delta>ceil;
}
và tất nhiên cung cấp các phương pháp tương tự với một mặc định hợp lý:
private static boolean isInt(double x) {
return isInt(x, 0.000000001);
}
Bây giờ isInt(val)
cuối cùng cũng trả về giá trị đúng.
Đã quá nhanh rồi. – OscarRyz