Java:System.out.format IllegalFormatPrecision 异常

标签 java formatting number-formatting

考虑以下循环来打印图表: 假设数组中的所有元素以及兴趣元素都有一个指定值,为什么 for 循环(准确地说是 System.out.format)会产生 IllegalFormatPrecisionException?

   double[] sbalance; 
   double[] fbalance; 
   double[] interest; 
   sbalance = new double[months]; 
   fbalance = new double[months]; 
   interest = new double[months];  
   int deposit; 
    for (int q = 1; q <= months; q++)
   {
       System.out.format ("%18.2d%", sbalance[q-1]); 
       System.out.format ("%18.2d%", interest [q-1]); 
       System.out.format ("%18.2d%", (double)deposit);
       System.out.format ("%18.2d%", fbalance [q-1]); 
    }

即使我返回并将数组重新声明为 Double[] 而不是 double[],程序也会产生相同的错误(我意识到 java 在自动装箱方面不一致)

非常感谢任何帮助。

最佳答案

有两个问题。

  1. 在格式字符串中,%18.2d 应为 %18.2f
  2. 格式字符串末尾的 % 应为 %n。 (在 cron 文件中,% 表示换行符,但在 Java 中,%n 表示换行符。)

这是工作代码:

public class Interest {

  public static void main(String[] args) {
    int months = 12;
    int deposit = 1000;

    double[] sbalance; 
    double[] fbalance; 
    double[] interest; 
    sbalance = new double[months]; 
    fbalance = new double[months]; 
    interest = new double[months];  
    for (int q = 1; q <= months; q++) {
      System.out.format ("Month %d%n", q); 
      System.out.format ("%18.2f%n", sbalance[q-1]); 
      System.out.format ("%18.2f%n", interest [q-1]); 
      System.out.format ("%18.2f%n", (double)deposit);
      System.out.format ("%18.2f%n", fbalance [q-1]); 
    }

  }

}

如果您想在编译时收到 IllegalFormatPrecision 错误警告而不是遭受运行时崩溃,您可以使用 Format String Checker Checker Framework的。如果您已安装并运行

$CHECKERFRAMEWORK/checker/bin/javac -processor formatter Interest.java

那么编译器会通过特定的错误消息警告您有关问题的信息。

关于Java:System.out.format IllegalFormatPrecision 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416866/

相关文章:

c# - 从 Markdown 文本中获取原始文本

excel - 如何从 VLookup 返回值中保留日期格式?

java - 挪威语的区域设置,博克马尔(挪威)问题

java - 按位与 (&) 运算符

java - 使用动态java变量在jsp中的一条语句中删除多行

java - android中的主机名可能不是空错误

Emacs 代码根据现有代码自动设置 indent-tabs-mode

php - 将字符串转换为波斯数字格式

swift - 如何在 swift xcode 中向小于 1.00 的答案开头添加零?

Java - 我需要在主方法内使用变量 boolean 值,在外部但在同一个类内初始化