Java:System.out.format IllegalFormatPrecision 异常

Posted

技术标签:

【中文标题】Java:System.out.format IllegalFormatPrecision 异常【英文标题】:Java: System.out.format IllegalFormatPrecision Exception 【发布时间】:2016-02-15 18:48:43 【问题描述】:

考虑以下循环来打印图表: 假设数组中的所有元素以及感兴趣的元素都有一个赋值,为什么 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。 在格式字符串的末尾,% 应该是%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 错误而不是遭受运行时崩溃,您可以使用 Checker Framework 的 Format String Checker。如果你已经安装并运行了

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

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

【讨论】:

【参考方案2】:

使用%f 代替%d

前者格式化浮点数;后者格式化整数。要求打印带 2 个小数位的整数是没有意义的。

【讨论】:

欢迎来到俱乐部。你赢了!【参考方案3】:

格式中的d 表示十进制整数,而不是双精度数。你应该使用f

【讨论】:

以上是关于Java:System.out.format IllegalFormatPrecision 异常的主要内容,如果未能解决你的问题,请参考以下文章

System.out.format的使用

Android,是不是可以像 System.out.format("%02d", n); 这样格式化 textview?

是否可以以相反的顺序使System.out.print排序变量?

java的double的大数值时 怎么才能不显示成

Java学习笔记

递归原来可以so easy|-连载