java.util.UnknownFormatConversionException:Conversion='';

java.util.UnknownFormatConversionException:Conversion='';,java,exception,error-handling,formatting,Java,Exception,Error Handling,Formatting,我必须根据用户输入的小数位数对最终数字进行四舍五入 像这样: 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.next

我必须根据用户输入的小数位数对最终数字进行四舍五入

像这样:

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.71f
的内容,因为。。。因为你想期待什么呢

简而言之,您需要传递整数值

这没关系:

String.format(“%.”+3+“f%n”,var);
但是,这不起作用(即引发相同的异常):

String.format(“%.”+3.14+“f%n”,var);

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));

还有一个额外的
,它从
变量进入字符串…请尝试:
..+(int)小数位数+…
。更好:
int des=s.nextInt()。。。。字符串格式(双变量,整数小数点)