la conversione di doppio interi in java

In Java, voglio convertire un doppio per un numero intero, so che se si esegue questa operazione:

double x = 1.5;
int y = (int)x;

si ottiene y=1. Se si esegue questa operazione:

int y = (int)Math.round(x);

Probabilmente otterrete 2. Tuttavia, mi chiedo: dal momento che il doppio rappresentazioni di numeri interi a volte apparire come 1.9999999998 o qualcosa del genere, c’è una possibilità che la fusione di un doppio creato attraverso la Matematica.round() sarà ancora causare un tronco in basso numero, piuttosto che il numero arrotondato stiamo cercando (ossia: 1 anziché 2, del codice, come rappresentato) ?

(e sì, intendo proprio come tale: c’È qualsiasi valore di x, dove y mostra un risultato che è un tronco piuttosto che un arrotondati rappresentazione di x?)

Se è così: c’È un modo migliore per fare una doppia in un arrotondati int senza correre il rischio di troncamento?


Capito qualcosa: la Matematica.round(x) restituisce un lungo, non è un doppio. Quindi: è impossibile per la Matematica.round() per restituire un numero di alla ricerca come 3.9999998. Pertanto, int(Math.round()) non avrà mai bisogno di troncare nulla e funziona sempre.

  • Per la matematica.round(double) restituisce un lungo, non è un doppio.
InformationsquelleAutor vdMandele | 2011-06-24

 

3 Replies
  1. 90

    c’è una possibilità che la fusione di un doppio creato tramite Math.round() porterà comunque in un tronco basso numero

    No, round() sempre intorno alla doppia al valore corretto, e quindi, sarà il cast di un long che tronca qualsiasi decimali. Ma dopo l’arrotondamento, non ci saranno frazionaria parti rimanenti.

    Qui sono i documenti da Matematica.round(double):

    Restituisce l’aeroporto più lungo dell’argomento. Il risultato viene arrotondato al valore intero aggiungendo 1/2, prendendo il piano del risultato, il casting e il risultato di tipo long. In altre parole, il risultato è uguale al valore dell’espressione:

    (long)Math.floor(a + 0.5d)
    • Il punto importante è che l’arrotondamento viene fatto all’interno del metodo round. Una lunga viene restituito un valore, che può essere tranquillamente cast a int (supponendo che il valore restituito sarà sempre all’interno int gamma).
    • Sì. Posso immaginare un /a lungo/ a int a dare problemi. Ovviamente! Deve aver pensato questo 🙁
    • Se è vero che il troncamento non si verifica a causa dell’arrotondamento, si può ancora ottenere i risultati previsti non solo a causa della fusione del doppio, che è un numero molto grande [max double: 1.7976931348623157E308] di int che è molto molto più piccolo [max int: 2147483647]. Solo qualcosa da tenere a mente.
  2. 22

    Per il tipo di dato Double per int, è possibile utilizzare le seguenti:

    Double double = 5.00;
    
    int integer = double.intValue();
    • Egli è alla ricerca di un valore arrotondato.
    • Non credo che darà a quanto previsto per 4.99999999999 (darà 4 non 5)

Lascia un commento