当前位置: 首页 > 知识库问答 >
问题:

printf不能使用字符串

孙正业
2023-03-14

我试图使这个printf工作,但我不断得到一个异常抱怨第一个'%'运算符。我像这样多次使用printf,从来没有出现过问题。我正在使用Eclipse。

为什么我的陈述不起作用,我如何让它起作用?

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

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

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

共有1个答案

祁霖
2023-03-14

第二%是有意的,把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')
...
 类似资料:
  • 问题内容: 我需要删除字符串中的一些子字符串(在大型数据集中)。该 子常常包含特殊字符,像这样的:,^,/,…和 的replaceAll()将它们视为对正则表达式的特殊字符,如点 会匹配任何字符,这是不是我真正想要的东西。 是否有其他函数可以执行“替换”而不将第一个 参数视为正则表达式? 问题答案: 只需使用String.replace()。它的功能相同,但是它 内部处理了特殊字符的转义,以避免您

  • 如何使用printf打印一行需要舍入的多个浮点数字。我知道我需要使用“%6.2f”将其四舍五入到小数点后两位。我需要将变量“temp”和“v”四舍五入到两个小数点。 我试过这个: System.out.printf("%6.2f,"温度 " " " 华氏度""%6.2f,"v""摄氏度"); 这不起作用。 System.out.printf(温度 " " " 华氏度为""v""摄氏度);

  • 问题内容: 我只是想将一些C代码转换为Java,而却遇到了一些麻烦。 在C中,要基于变量获取特定宽度,我可以使用: 并将其格式化为基于的特定大小。 试: 导致错误,因为它不喜欢。 我目前有以下问题: 但我希望有一种更好的方法,是吗? 问题答案: 在使用前声明一个额外的变量: (这是我从网络搜索中找到的第一个解决方案)

  • 我试图使用python客户端应用筛选弹性搜索索引数据,但它不能处理字符串字段。 这是我的ES索引数据: [{u“_score”:1.0,u“_type”:u“ip”,u“_id”:u“79”,u“_source”:{u“status”:u“published”,u“username”:u“jackie@example.com”,u“id”:79},u“_index”:u“idx_object”},

  • 有人能解释一下printf中的是如何使用说明符“%g”的吗?下面的输出让我很困惑: 我了解到使用最短的表示形式。 但是下面的输出仍然让我困惑 我的问题是:为什么能给出确切的数字,而不能? 似乎16个有效数字是准确的。有人能告诉我原因吗?