Arrondir un double pour le transformer en int (java)

En ce moment j’essaye ceci:

int a = round(n); 

n est un double mais ça ne marche pas. Qu’est-ce que je fais mal?

Quel est le type de retour de la méthode round() dans l’extrait de code?

S’il s’agit de la méthode Math.round() , elle renvoie un Long lorsque le paramètre d’entrée est Double.

Donc, vous devrez lancer la valeur de retour:

 int a = (int) Math.round(doubleVar); 

Si vous n’aimez pas Math.round (), vous pouvez également utiliser cette approche simple:

 int a = (int) (doubleVar + 0.5); 

Arrondir le double au nombre entier le plus proche comme ceci:

1.4 -> 1

1,6 -> 2

-2,1 -> -2

-1.3 -> -1

-1,5 -> -2

 private int round(double d){ double dAbs = Math.abs(d); int i = (int) dAbs; double result = dAbs - (double) i; if(result<0.5){ return d<0 ? -i : i; }else{ return d<0 ? -(i+1) : i+1; } } 

Vous pouvez modifier la condition (résultat <0,5) comme vous le souhaitez.

 import java.math.*; public class TestRound11 { public static void main(Ssortingng args[]){ double d = 3.1537; BigDecimal bd = new BigDecimal(d); bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP); // output is 3.15 System.out.println(d + " : " + round(d, 2)); // output is 3.154 System.out.println(d + " : " + round(d, 3)); } public static double round(double d, int decimalPlace){ // see the Javadoc about why we use a Ssortingng in the constructor // http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double) BigDecimal bd = new BigDecimal(Double.toSsortingng(d)); bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } } 

La documentation de Math.round dit:

Renvoie le résultat de l’arrondi de l’argument à un entier . Le résultat est équivalent à (int) Math.floor(f+0.5) .

Pas besoin de lancer pour int . Peut-être que cela a été changé par le passé.

 public static int round(double d) { if (d > 0) { return (int) (d + 0.5); } else { return (int) (d - 0.5); } } 

La fonction Math.round est surchargée Lorsqu’elle reçoit une valeur flottante, elle vous donne un int. Par exemple, cela fonctionnerait.

 int a=Math.round(1.7f); 

Quand il reçoit une valeur double, cela vous donnera un long, donc vous devez le transtyper en int.

 int a=(int)Math.round(1.7); 

Ceci est fait pour éviter la perte de précision. Votre valeur double est de 64 bits, mais votre variable int ne peut stocker que 32 bits, elle le convertit donc en long, ce qui correspond à 64 bits, mais vous pouvez le convertir en 32 bits comme expliqué ci-dessus.

Vous devez vraiment publier un exemple plus complet pour que nous puissions voir ce que vous essayez de faire. D’après ce que vous avez posté, voici ce que je peux voir. Tout d’abord, il n’y a pas de méthode round() intégrée. Vous devez soit appeler Math.round(n) , soit importer statiquement Math.round , puis l’appeler comme vous l’avez fait.