Округлить до двух десятичных знаков java без переназначения новой переменной - PullRequest
1 голос
/ 07 мая 2019

У меня есть следующий код, где мне нужно напечатать значение с точностью до двух знаков после запятой, удаляя точку (.) Из числа.Однако иногда он печатает до двух, а иногда до трех знаков после запятой.

public class CheckSubString3 {

    public static void main(String[] args) {

        Double[] d={134344.00d,234434.08d,234434.02d};
        for(int i=0; i<d.length; i++){
            System.out.println((d[i])*(25)/100);
            System.out.println(parseLonggetFormattedAmount((d[i])*(25)/100));
            System.out.println();
        }

    }

    private static String parseLonggetFormattedAmount(double d) {
        DecimalFormat format = (DecimalFormat) NumberFormat
                .getInstance(new Locale("en", "gb"));
        format.setMinimumFractionDigits(2);
        FieldPosition f = new FieldPosition(0);
        StringBuffer s = new StringBuffer();
        String value = format.format(d, s, f).toString().replace(',', ' ')
                .replace('.', ' ');
        return value.replaceAll(" ","");
    }
}

Ниже выводится:

original value 33586.0
required value 3358600

original value 58608.52
required value 5860852

original value 58608.505
required value 58608505// This line is giving upto 3 places of decimal

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Согласно документации NumberFormat , вы можете использовать setMaximumFractionDigits(int newValue)

Устанавливает максимально допустимое количество цифр в дробной части числа.

просто вставьте его в свою функцию parseLonggetFormattedAmount(double d):

format.setMaximumFractionDigits(2);
0 голосов
/ 07 мая 2019

Кажется, вы просто хотите умножить двойные на 100 и округлить до ближайшего целого числа.Таким образом, ваш метод может быть написан:

private static String parseLonggetFormattedAmount(double d) {
  return String.valueOf(Math.round(d * 100));
}

Какие выходные данные:

3358600
5860852
5860851

...