131 votes

Arrondir un double pour le transformer en int (java)

En ce moment, j'essaie ceci :

int a = round(n);

n est un double mais cela ne fonctionne pas. Qu'est-ce que je fais de mal ?

263voto

Mihir Mathuria Points 3060

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);

30voto

Daniel Thommes Points 111

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

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

12voto

anivaler Points 403

Arrondir le double à l'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 changer de condition (résultat<0,5) comme vous le souhaitez.

3voto

Scott Points 903
import java.math.*;
public class TestRound11 {
  public static void main(String 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 String in the constructor
    // http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)
    BigDecimal bd = new BigDecimal(Double.toString(d));
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X