Câu trả lời:
Theo Javadoc cùng:
Nếu đối số là NaN
hoặc vô cực hoặc số 0 dương hoặc số 0 âm, thì kết quả giống với đối số. Không thể làm điều đó với một int
.
double
Giá trị lớn nhất cũng lớn hơn giá trị lớn nhất int
, vì vậy nó sẽ phải là a long
.
Nó cho độ chính xác. Kiểu dữ liệu kép có phần định trị 53 bit. Trong số những điều khác có nghĩa là một đôi có thể đại diện cho tất cả tổng thể lên đến 2 ^ 53 mà không bị mất độ chính xác.
Nếu bạn lưu trữ một số lớn như vậy trong một số nguyên, bạn sẽ bị tràn. Số nguyên chỉ có 32 bit.
Trả lại số nguyên dưới dạng kép là điều đúng đắn cần làm ở đây vì nó cung cấp phạm vi số hữu ích rộng hơn nhiều so với số nguyên có thể.
Những người khác đã cho bạn biết lý do tại sao, tôi sẽ cho bạn biết cách làm tròn một cách chính xác nếu bạn muốn làm điều này. Nếu bạn chỉ sử dụng các số dương, thì bạn có thể sử dụng câu lệnh sau:
int a=(int) 1.5;
Tuy nhiên, (int) luôn làm tròn về phía 0. Vì vậy, nếu bạn muốn thực hiện một số âm:
int a=(int) -1.5; //Equal to -1
Trong trường hợp của tôi, tôi không muốn làm điều này. Tôi đã sử dụng mã sau để làm tròn và có vẻ như nó xử lý tốt tất cả các trường hợp cạnh:
private static long floor(double a)
{
return (int) Math.floor(a);
}
(int) Math.floor(a)
? Nó có lẽ hiệu quả hơn và nó ngắn hơn.
(int) Math.floor(a)
bạn có thể chỉ cần viết (int) a
, nếu a là dương.
Cũng giống như cách phân chia số nguyên và dấu phẩy động trong Java, có những cách phân chia số nguyên và dấu phẩy động để thực hiện tầng:
double f = Math.floor(x);
hoặc là
int k = (int) x;
nhưng bạn luôn cần phải cẩn thận với việc sử dụng sàn với số học chính xác hữu hạn: phép tính x của bạn có thể mang lại kết quả như 1.99999999 sẽ được xếp thành 1, không phải 2 bởi cả hai dạng. Có nhiều thuật toán cần giải quyết hạn chế này để tránh tạo ra kết quả sai cho một số giá trị đầu vào.
Vì vậy, lỗi đó và các giá trị không phải số nguyên khác có thể phân tầng chính xác thông qua một loạt các phép tính.
Ví dụ: nếu bạn cung cấp Không phải số (NaN) vào Math.floor, nó sẽ chuyển nó theo.
Nếu nó trả về số nguyên, nó không thể vượt qua những trạng thái hoặc lỗi này và bạn có thể nhận được kết quả xấu từ một phép tính trước đó trông tốt nhưng lại sai sau khi xử lý thêm.