double
thấy chỉ có 15/16 con số chính xác và khi bạn cho nó một số nó không thể đại diện (đó là hầu hết thời gian, thậm chí 0.1 là không chính xác) nó có số đại diện gần nhất.
Nếu bạn muốn đại diện cho 9999999999999999
chính xác, bạn cần sử dụng BigDecimal.
BigDecimal bd = new BigDecimal("9999999999999999");
System.out.println(new DecimalFormat("#.##").format(bd));
in
9999999999999999
Rất ít các vấn đề thế giới thực cần độ chính xác này bởi vì bạn không thể đo lường một cách chính xác bất cứ điều gì này anyway. tức là lỗi 1 phần trên mỗi nghìn tỷ.
Bạn có thể tìm ra số nguyên biểu diễn lớn nhất với
// search all the powers of 2 until (x + 1) - x != 1
for (long l = 1; l > 0; l <<= 1) {
double d0 = l;
double d1 = l + 1;
if (d1 - d0 != 1) {
System.out.println("Cannot represent " + (l + 1) + " was " + d1);
break;
}
}
in
Cannot represent 9007199254740993 was 9.007199254740992E15
Các số nguyên biểu diễn lớn nhất là 9007199254740992 vì nó cần một ít bit (như thậm chí nó)
Nguồn
2012-01-18 09:21:33
dấu chấm động số học --- bí ẩn lớn nhất của khoa học máy tính từ năm 1985 – subsub