【问题标题】:java.util.UnknownFormatConversionException: Conversion = '.'java.util.UnknownFormatConversionException:转换='。'
【发布时间】:2020-03-08 09:54:53
【问题描述】:

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

像这样:

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。所以现在我不知道问题出在哪里。

有什么想法吗?谢了

【问题讨论】:

  • 还有一个额外的.,它来自您的double 变量...尝试:... + (int) decimalPlaces + ... ..更好:int des = s.nextInt(); .... String format(double var, int decimalPlaces)

标签: java exception error-handling formatting


【解决方案1】:

decimalPlaces 不应该有double 这样的类型,对吧?
你不能通过像%.2.71f 这样的东西,因为...因为你想期待什么?

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

没关系:

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

但是这不起作用(即抛出相同的异常):

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 2022-01-22
      • 2018-06-06
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多