Risposte:
Secondo lo stesso Javadoc:
Se l'argomento è NaNo un infinito o zero positivo o zero negativo, il risultato è lo stesso dell'argomento. Non puoi farlo con un file int.
Il doublevalore più grande è anche maggiore del più grande int, quindi dovrebbe essere a long.
È per la precisione. Il doppio tipo di dati ha una mantissa a 53 bit. Tra l'altro ciò significa che un doppio può rappresentare tutto intero fino a 2 ^ 53 senza perdita di precisione.
Se memorizzi un numero così elevato in un numero intero, otterrai un overflow. I numeri interi hanno solo 32 bit.
Restituire il numero intero come double è la cosa giusta da fare qui perché offre un intervallo di numeri utili molto più ampio di quello che potrebbe fare un intero.
Altri ti hanno detto il perché, ti dirò come arrotondare correttamente dato che vuoi farlo. Se intendi utilizzare solo numeri positivi, puoi utilizzare questa affermazione:
int a=(int) 1.5;
Tuttavia, (int) arrotonda sempre verso 0. Quindi, se vuoi fare un numero negativo:
int a=(int) -1.5; //Equal to -1
Nel mio caso, non volevo farlo. Ho usato il seguente codice per eseguire l'arrotondamento e sembra che gestisca bene tutti i casi limite:
private static long floor(double a)
{
return (int) Math.floor(a);
}
(int) Math.floor(a)? Probabilmente è più efficiente ed è più breve.
(int) Math.floor(a)te puoi semplicemente scrivere (int) a, se è positivo.
Proprio come esiste un numero intero e una divisione in virgola mobile in Java, ci sono modi interi e in virgola mobile per eseguire floor:
double f = Math.floor(x);
o
int k = (int) x;
ma devi sempre stare attento quando usi floor con aritmetica di precisione finita: il tuo calcolo di x può produrre qualcosa come 1.99999999 che sarà floor a 1, non a 2 da entrambe le forme. Ci sono molti algoritmi là fuori che devono aggirare questa limitazione per evitare di produrre risultati errati per alcuni valori di input.
In modo che l'errore e altri valori non interi possano ricadere correttamente in una serie di calcoli.
Ad esempio, se inserisci Not a Number (NaN) in Math.floor, lo trasmetterà.
Se restituisse un numero intero, non potrebbe trasmettere questi stati o errori e potresti ottenere risultati negativi da un calcolo precedente che sembra buono ma è sbagliato dopo un'ulteriore elaborazione.