Как округлить двойные до двух десятичных знаков в Java? - PullRequest
62 голосов
/ 19 апреля 2011

Это то, что я сделал, чтобы округлить двойные до двух десятичных знаков:

amount = roundTwoDecimals(amount);

public double roundTwoDecimals(double d) {
    DecimalFormat twoDForm = new DecimalFormat("#.##");
    return Double.valueOf(twoDForm.format(d));
}

Это прекрасно работает, если сумма = 25,3569 или что-то в этом роде, но если сумма = 25,00 или сумма = 25,0, то я получаю 25,0! То, что я хочу, это и округление, и форматирование до 2 десятичных знаков.

Ответы [ 20 ]

1 голос
/ 20 февраля 2015

Вы можете попробовать это:

public static String getRoundedValue(Double value, String format) {
    DecimalFormat df;
    if(format == null)
        df = new DecimalFormat("#.00");
    else 
        df = new DecimalFormat(format);
    return df.format(value);
}

или

public static double roundDoubleValue(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
}
1 голос
/ 11 ноября 2016
DecimalFormat df = new DecimalFormat("###.##");
double total = Double.valueOf(val);
0 голосов
/ 18 октября 2017
    int i = 180;
    int j = 1;
    double div=  ((double)(j*100)/i);
    DecimalFormat df = new DecimalFormat("#.00"); // simple way to format till any deciaml points
    System.out.println(div);
    System.out.println(df.format(div));
0 голосов
/ 05 июня 2017

Сначала объявляем объект класса DecimalFormat.Обратите внимание, что аргумент внутри DecimalFormat равен #.00, что означает ровно 2 десятичных знака округления.

private static DecimalFormat df2 = new DecimalFormat("#.00");

Теперь примените формат к вашему двойному значению:

double input = 32.123456;
System.out.println("double : " + df2.format(input)); // Output: 32.12

Обратите внимание, в случае double input = 32.1;

Тогда вывод будет 32.10 и т. Д.

0 голосов
/ 05 декабря 2016

Вот простой способ, гарантирующий вывод myFixedNumber с округлением до двух десятичных знаков:

import java.text.DecimalFormat;

public class TwoDecimalPlaces {
    static double myFixedNumber = 98765.4321;
    public static void main(String[] args) {

        System.out.println(new DecimalFormat("0.00").format(myFixedNumber));
    }
}

Результат: 98765.43

0 голосов
/ 19 сентября 2016

где num - это двойное число

  • Целое число 2 обозначает количество десятичных разрядов, которые мы хотим напечатать.
  • Здесь мы берем 2 десятичных знака

    System.out.printf ( "% 2f"., Кол-во);

0 голосов
/ 19 апреля 2011

Если вы хотите получить результат с двумя десятичными разрядами, вы можете сделать

// assuming you want to round to Infinity.
double tip = (long) (amount * percent + 0.5) / 100.0; 

Этот результат не точный, но Double.toString (double) исправит это и выведет один или два десятичных знака.Однако, как только вы выполните другое вычисление, вы можете получить результат, который не будет неявно округлен.;)

0 голосов
/ 17 марта 2016

Начиная с Java 1.8, вы можете делать больше с лямбда-выражениями и проверками на ноль.Кроме того, один ниже может обрабатывать число с плавающей запятой или двойное и переменное число десятичных знаков (включая 2: -)).

0 голосов
/ 14 июля 2014

Math.round один ответ,

public class Util {
 public static Double formatDouble(Double valueToFormat) {
    long rounded = Math.round(valueToFormat*100);
    return rounded/100.0;
 }
}

Тест в Споке, Groovy

void "test double format"(){
    given:
         Double performance = 0.6666666666666666
    when:
        Double formattedPerformance = Util.formatDouble(performance)
        println "######################## formatted ######################### => ${formattedPerformance}"
    then:
        0.67 == formattedPerformance

}
0 голосов
/ 14 июля 2014

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

amount = roundTwoDecimals(amount);

public double roundTwoDecimals(double d) {
    if (d < 0)
       d -= 0.005;
    else if (d > 0)
       d += 0.005;
    return (double)((long)(d * 100.0))/100);
}
...