So sánh double vs float
| Đặc điểm | double | float |
|---|---|---|
| Kích thước | 64-bit (8 bytes) | 32-bit (4 bytes) |
| Độ chính xác (số chữ số thập phân) | 15-16 chữ số | 6-7 chữ số |
| Dải số mũ (exponent) | 11 bit | 8 bit |
| Bit dấu (sign) | 1 bit | 1 bit |
| Giá trị mặc định | 0.0d | 0.0f |
| Hằng số literal | 5.0, 5.0d, 5.0D | 5.0f, 5.0F |
Khi nào dùng double?
- Cần độ chính xác cao: tính toán khoa học, tài chính (tuy nhiên tài chính nên dùng
BigDecimal), đo lường. - Biến tạm (temp variables) trong tính toán trung gian.
- Mặc định cho literal số thực trong Java là
double.
Khi nào dùng float?
- Tiết kiệm bộ nhớ: mảng lớn số thực (millions of elements).
- Độ chính xác thấp chấp nhận được: đồ họa, game, sensor data.
- Tương thích API/hardware yêu cầu float (OpenGL, GPU).
Ví dụ minh họa độ chính xác
public class DoubleVsFloatPrecision {
public static void main(String[] args) {
double d = 55.637848675695785;
float f = 25.657933f;
System.out.println("double: " + d); // 55.637848675695786 (làm tròn cuối)
System.out.println("float: " + f); // 25.657932 (mất chính xác sau 7 chữ số)
}
}
Kết quả
double: 55.637848675695786
float: 25.657932
Quy tắc chung: Mặc định dùng double. Chỉ dùng float khi có lý do rõ ràng (bộ nhớ, API). Tránh dùng float/double cho tiền tệ – dùng BigDecimal.