2010-08-29 4 views
28

Possible en double:
Round a double to 2 significant figures after decimal pointronde à 2 décimales

Je:

mkm=((((amountdrug/fluidvol)*1000)/60)*infrate)/ptwt; 

dans mon code Java. Le code fonctionne bien mais retourne à plusieurs décimales. Comment puis-je le limiter à seulement 2 ou 3?

+4

Pas la même chose. Le candidat dupe lié explique comment imprimer un nombre arrondi, pas comment arrondir la valeur stockée dans la variable. – sblom

Répondre

89

Ne pas utiliser double. Vous pouvez perdre de la précision. Voici une fonction générale.

public static double round(double unrounded, int precision, int roundingMode) 
{ 
    BigDecimal bd = new BigDecimal(unrounded); 
    BigDecimal rounded = bd.setScale(precision, roundingMode); 
    return rounded.doubleValue(); 
} 

Vous pouvez l'appeler avec

round(yourNumber, 3, BigDecimal.ROUND_HALF_UP); 

"précision" étant le nombre de chiffres après la virgule que vous désirez.

+0

Merci bluedevil d'avoir pris le temps de répondre. J'ai essayé votre suggestion et ai eu des erreurs en disant que "BigDecimal ne peut pas être résolu en un type". J'ai peur d'être nouveau et d'avoir besoin du guide des idiots! – Alan

+8

importer java.math.BigDecimal – bluedevil2k

+0

brillant, merci: =) – cV2

0

Essayez:

float number mkm = (((((amountdrug/fluidvol)*1000f)/60f)*infrate)/ptwt)*1000f; 
int newNum = (int) mkm; 
mkm = newNum/1000f; // Will return 3 decimal places 
+0

Salut travega, je vous remercie de prendre le temps de m'aider avec cela. J'ai copié et collé le code que vous avez fourni, mais j'obtiens l'erreur «erreur de syntaxe, insérer»; pour compléter LocalVariableDeclarationStatement '. J'ai vérifié les trois ';' dans le code ci-dessus sont en place. – Alan

11

utiliser Juste Math.round()

double mkm = ((((amountdrug/fluidvol)*1000f)/60f)*infrate)/ptwt; 

mkm= (double)(Math.round(mkm*100))/100; 
+0

math.round ne fonctionnera pas ici car vous ne recevez pas 2 décimales par question – Adsy2010

8
double formattedNumber = Double.parseDouble(new DecimalFormat("#.##").format(unformattedNumber)); 

a fonctionné pour moi :)

1

BigDecimal a = new BigDecimal("12345.0789");
a = a.divide(new BigDecimal("1"), 2, BigDecimal.ROUND_HALF_UP);
//Also check other rounding modes
System.out.println("a >> "+a.toPlainString()); //Returns 12345.08

-2

Créer une classe appelée Round et essayez d'utiliser le met rond Hod comme Round.round (TARGETVALUE, roundToDecimalPlaces) dans votre code

public class Round { 

     public static float round(float targetValue, int roundToDecimalPlaces){ 

      int valueInTwoDecimalPlaces = (int) (targetValue * Math.pow(10, roundToDecimalPlaces)); 

      return (float) (valueInTwoDecimalPlaces/Math.pow(10, roundToDecimalPlaces)); 
     } 

    } 
Questions connexes