Hello Dũng,
Điều này xảy ra do số thập phân khi biểu diễn dưới dạng float sẽ bị làm tròn và không chính xác. Vì vậy, khi bạn nhập giá trị 9.999999999999999, thực chất giá trị đó sẽ được làm tròn và biểu diễn là 10. Do đó, nó sẽ được chấp nhận trong điều kiện “a >= 10”.
Để giải quyết vấn đề này, bạn nên sử dụng kiểu dữ liệu double thay cho float để giữ cho giá trị thập phân được biểu diễn chính xác hơn. Và bạn có thể sử dụng một số phương pháp để so sánh hai số thực như chuyển đổi sang dạng số nguyên hoặc so sánh với một giá trị rất nhỏ như 0.000001 để xem hai số thực có bằng nhau không.
Ví dụ, bạn có thể sửa mã của mình như sau để sử dụng double và so sánh với một giá trị rất nhỏ để xác định xem giá trị của “a” có bé hơn 10 hay không:
System.out.println("Nhap a = ");
double a = scanner.nextDouble();
if (Math.abs(a - 10) < 0.000001) {
System.out.println("Khong nhan gia tri a");
} else if (a >= 10) {
System.out.println("Nhan gia tri a");
} else {
System.out.println("Khong nhan gia tri a");
}
Trong đó, phương thức Math.abs(a - 10) sẽ trả về giá trị tuyệt đối của sự khác biệt giữa a và 10, và so sánh kết quả với một giá trị rất nhỏ để xác định xem giá trị của “a” có bé hơn 10 hay không.
Chúc bạn lập trình vui vẻ.