2010-08-29 4 views
28

Можно создать дубликат:
Round a double to 2 significant figures after decimal pointокруглить до 2 знаков после запятой

У меня есть:

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

в моем Java коде. Код работает нормально, но возвращается к нескольким десятичным знакам. Как ограничить его до 2 или 3?

+4

Не то же самое. Связанный кандидат-дубликат обсуждает, как печатать округленное число, а не как фактически округлить значение, хранящееся в переменной. – sblom

ответ

1

Умножаем на 1000, круглый, и раздели обратно на 1000.

Для основной Java: http://download.oracle.com/javase/tutorial/getStarted/index.html и http://download.oracle.com/javase/tutorial/java/index.html

+0

Спасибо Thorbjorn за ответ. В далеком прошлом, когда я использовал программу в основном, я использовал бы то, что вы предложили (хотя это было int (x) не раунд). Я не могу понять, как это сделать в java-андроиде. – Alan

89

Не используйте двойников. Вы можете потерять определенную точность. Вот функция общего назначения.

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

Вы можете назвать это с

round(yourNumber, 3, BigDecimal.ROUND_HALF_UP); 

"точность" означает число десятичных точек вы хотите.

+0

Спасибо bluedevil за то, что нашли время, чтобы ответить. Я попробовал ваше предложение и получил ошибки, говоря: «BigDecimal не может быть разрешен для типа». Боюсь, я новичок в этом и нуждаюсь в руководстве идиотов! – Alan

+8

import java.math.BigDecimal – bluedevil2k

+0

блестящий, спасибо: =) – cV2

0

Try:

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

Привет, травега, я приписываю вам время, чтобы помочь мне в этом. Я скопировал и вставил код, который вы предоставили, но получаю ошибку - «синтаксическая ошибка, вставка»; для завершения LocalVariableDeclarationStatement '. Я проверил три «;» в приведенном выше коде на месте. – Alan

11

Просто используйте Math.round()

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

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

math.round не будет работать здесь, так как вы не получаете 2 десятичных знака в соответствии с вопросом – Adsy2010

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

работал для меня :)

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

Создайте класс Круглые и попробуйте использовать встреченный корыто круглые, как Round.round (targetValue, roundToDecimalPlaces) в коде

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

    }