java .util.UnknownFormatConversionException: Conversion = '.' - PullRequest
0 голосов
/ 08 марта 2020

Мне нужно округлить окончательное число по количеству десятичных разрядов из пользовательского ввода.

Как это:

static String format(double var, double decimalPlaces) {
        return String.format("%." + decimalPlaces + "f%n", var);
    }

Scanner s = new Scanner(System.in).useLocale(Locale.US);
double s1,s2,sou,des;
s1 = s.nextDouble();
s2 = s.nextDouble();
des = s.nextDouble();
sou = s1 + s2;
System.out.printf(format(sou, des));

Но на линии с:

return String.format("%." + decimalPlaces + "f%n", var);

Возвращает эту ошибку:

Исключение в потоке "main" java .util.UnknownFormatConversionException: Conversion = '.'

Я посмотрел это форматирование, но у всех было такое же, как у меня, и я также использовал double с переменными. Так что теперь я понятия не имею, в чем проблема.

Есть идеи? THX

Ответы [ 2 ]

1 голос
/ 08 марта 2020

decimalPlaces не должен иметь такой тип, как double, верно?
Вы не можете передать что-то вроде %.2.71f, потому что ... потому что чего вы хотите ожидать?

Короче говоря, вам нужно передать целочисленное значение.

Это нормально:

String.format("%." + 3 + "f%n", var);

Однако это не работает (то есть выдается то же исключение):

String.format("%." + 3.14 + "f%n", var);
0 голосов
/ 08 марта 2020

Измените тип данных deciamlValues на int

    static String format(double var, int decimalPlaces) {
        return String.format("%." + decimalPlaces + "f%n", var);
    }

Вы также можете использовать NumberFormat для этого, тогда вам не нужно писать отдельный метод для форматирования.

        sou = s1 + s2;

        NumberFormat df = new DecimalFormat("#0.00");     
        System.out.printf(df.format(sou));
...