Подтвердить что ты не робот

Круглые до двух знаков после запятой

Возможный дубликат:
Радиус удвоения до 2 значащих цифр после десятичной точки

У меня есть:

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

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

4b9b3361

Ответ 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));

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

Ответ 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));
        }

    }