Domanda

In C # se voglio convertire un doppio (1.71472) in un int allora ottengo la risposta 2. Se lo faccio in Java usando il metodo intValue (), ottengo 1 come risposta.

Java arrotonda per difetto le conversioni?

Perché i documenti API Java hanno informazioni così scarse sulle loro classi, ad esempio

  

Restituisce il valore dell'oggetto specificato   numero come int. Ciò può comportare   arrotondamento o troncamento.

Un po 'più di informazioni sull'arrotondamento sarebbe stato utile!

È stato utile?

Soluzione

Java viene arrotondato a zero quando si restringe da un punto mobile a un tipo intero & # 8212; e così fa C #, quando si utilizza la conversione di cast. È Convert.ToInt32 che arrotonda:

double d = 1.71472;
int x = (int) d; // x = 1
int y = Convert.ToInt32(d); // y = 2

I dettagli sono disponibili nelle Specifiche del linguaggio Java . Si noti che mentre la documentazione citata in Number lascia aperte le opzioni per le sottoclassi, la documentazione sui tipi di boxe concreti, come Double , è esplicito sull'implementazione:

  

Restituisce il valore di questo doppio come un   int (eseguendo il casting per digitare int).

Quando si utilizza BigDecimal , puoi specificare una delle otto diverse politiche di arrotondamento.

Altri suggerimenti

Java arrotonda verso zero quando si restringe da un punto mobile a un tipo intero.

C'è più documentazione sulle regole generali nel Java Language specifiche . Si noti che mentre la documentazione in Number lascia aperte le opzioni per le sottoclassi, la documentazione sui tipi di boxe concreti è più esplicita:

  

Restituisce il valore di questo doppio come un   int (eseguendo il casting per digitare int).

Quando si utilizza BigDecimal , puoi specificare una delle otto diverse politiche di arrotondamento.

Jon Skeet è corretto, ma qualcos'altro da tenere presente è che .NET utilizza Banker's Rounding come algoritmo di arrotondamento. Quando sei a metà strada tra il round e il numero intero pari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top