【问题标题】:printf isn't working with Stringsprintf 不适用于字符串
【发布时间】:2016-02-12 06:58:05
【问题描述】:

我正在尝试使这个 printf 工作,但我不断收到一个异常,抱怨第一个 '%' 运算符。我已经多次像这样使用 printf 了,从来没有遇到过问题。我正在使用日食。

我的问题:

为什么我的声明不起作用,我怎样才能使它起作用?

注意:

在第 18 行,第二个 % 用于表示文字 %

printf 语句:

14 System.out.printf("Symbol: %s\n"
15      + "Name: %s\n"
16      + "Previous Closing Price: %1.2f\n"
17      + "Current Price: %1.2f\n"
18      + "Change: %1.2f%", 
19      stock.symbol, 
20      stock.name, 
21      stock.previousClosingPrice,
22      stock.currentPrice,
23      stock.getChangePercent());

错误:

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '%'
    at java.util.Formatter.checkText(Unknown Source)
    at java.util.Formatter.parse(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.io.PrintStream.format(Unknown Source)
    at java.io.PrintStream.printf(Unknown Source)
    at No8_2.main(No8_2.java:14)

价值观:

不一定程序中的实际代码)

stock.symbol = "ORCL";
stock.name = "Oracle Corporation";
stock.previousClosingPrice = 34.5;
stock.currentPrice = 34.35;

“库存”类:

class Stock{
    //Stock Object
    String symbol;
    String name;
    double previousClosingPrice;
    double currentPrice;

    Stock(String sym, String nam){
        //Initialize Instance Vars
        this.symbol = sym;
        this.name = nam;
    }

    public double getChangePercent(){
        //Return (in %) the change in price
        return ((currentPrice - previousClosingPrice)/previousClosingPrice)*100;
    }
}

免责声明:这是一项家庭作业,但我已经为它编写了完整的代码。我只需要克服这个错误,并获得我的导师的许可,就可以发布这样的问题。

【问题讨论】:

  • 它还没有抱怨这一点。它的问题是第 14 行。这应该在输出中的双精度后添加一个%。 @Satya
  • @Abdelhak 我添加了行号。它在抱怨第 14 行。第二个% 是故意的,将14.5 变成14.5%
  • @AndreasFester 解决了!谢谢!如果你愿意,你可以快速回答,我会标记它。

标签: java class object exception printf


【解决方案1】:

第二个%是故意的,把14.5变成14.5%

您需要使用第二个% 转义%

System.out.printf("Symbol: %s\n"
      + "Name: %s\n"
      + "Previous Closing Price: %1.2f\n"
      + "Current Price: %1.2f\n"
      + "Change: %1.2f%%", 
      //               ^
      stock.symbol, 
      stock.name, 
      stock.previousClosingPrice,
      stock.currentPrice,
      stock.getChangePercent());

另见https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html

一般来说,格式说明符的语法如下:

%[argument_index$][flags][width][.precision]conversion

下表总结了支持的转换:

...
'%'   percent The result is a literal '%' ('\u0025')
...

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2017-03-25
    • 2014-07-13
    • 1970-01-01
    • 2014-09-04
    • 2017-12-26
    相关资源
    最近更新 更多