Réponse différente lors de la conversion d'un double en un Int - Java vs .Net

StackOverflow https://stackoverflow.com/questions/300055

  •  08-07-2019
  •  | 
  •  

Question

En C #, si je veux convertir un double (1.71472) en un entier, alors je reçois la réponse 2. Si je le fais en Java avec la méthode intValue (), la réponse obtenue est 1.

Java réduit-il les conversions?

Pourquoi les documents de l'API Java contiennent-ils des informations aussi rares sur leurs classes, c.-à-d.

  

Renvoie la valeur de la spécifiée   nombre en tant que int. Cela peut impliquer   arrondi ou troncature.

Un peu plus d'informations sur les arrondis auraient été utiles!

Était-ce utile?

La solution

Java arrondit à zéro lorsque l'on passe d'un point à virgule flottante à un type entier. Il en va de même pour C #, lorsque vous utilisez la conversion de conversion. C'est Convert.ToInt32 qui arrondit:

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

Vous trouverez des détails dans la Spécification du langage Java . Notez que, si la documentation citée dans Number laisse des options ouvertes pour les sous-classes, la documentation sur les types de boxe concrets, comme Double , est explicite à propos de la mise en œuvre:

  

Renvoie la valeur de ce double sous forme de   int (par transtypage à taper int).

Lors de l'utilisation de BigDecimal , vous pouvez spécifier l’une des huit règles d’arrondi différentes.

Autres conseils

Java arrondit à zéro lors du passage d'un nombre à virgule flottante à un type entier.

Il existe davantage de documentation sur les règles générales dans le langage Java. Spécification . Notez que si la documentation dans Number laisse des options ouvertes pour les sous-classes, la documentation sur les types de boxe concrets est plus explicite:

  

Renvoie la valeur de ce double sous forme de   int (en transtypant taper int).

Lors de l'utilisation de BigDecimal , vous pouvez spécifier l’une des huit règles d’arrondi différentes.

Jon Skeet a raison, mais il convient de surveiller .NET utilise Arrondi bancaire comme algorithme d'arrondi. Lorsque vous êtes à mi-chemin entre le tour et le nombre entier pair.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top