Круглые до двух знаков после запятой
Возможный дубликат:
Радиус удвоения до 2 значащих цифр после десятичной точки
У меня есть:
mkm=((((amountdrug/fluidvol)*1000)/60)*infrate)/ptwt;
в моем коде Java. Код работает нормально, но возвращается к нескольким десятичным знакам. Как ограничить его до 2 или 3?
Ответы
Ответ 1
Не используйте удвоения. Вы можете потерять определенную точность. Здесь используется функция общего назначения.
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);
"точность" - это количество желаемых десятичных точек.
Ответ 2
Просто используйте Math.round()
double mkm = ((((amountdrug/fluidvol)*1000f)/60f)*infrate)/ptwt;
mkm= (double)(Math.round(mkm*100))/100;
Ответ 3
double formattedNumber = Double.parseDouble(new DecimalFormat("#.##").format(unformattedNumber));
работал у меня:)
Ответ 4
Умножьте на 1000, округлите и разделите на 1000.
Для базовой Java: http://download.oracle.com/javase/tutorial/getStarted/index.html и http://download.oracle.com/javase/tutorial/java/index.html
Ответ 5
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
Ответ 6
Try:
float number mkm = (((((amountdrug/fluidvol)*1000f)/60f)*infrate)/ptwt)*1000f;
int newNum = (int) mkm;
mkm = newNum/1000f; // Will return 3 decimal places
Ответ 7
Создайте класс Round и попробуйте использовать метод round как 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));
}
}