Java 中 System.out.printf 命令的问题

Posted

技术标签:

【中文标题】Java 中 System.out.printf 命令的问题【英文标题】:Problem with System.out.printf command in Java 【发布时间】:2010-09-11 23:22:28 【问题描述】:

我是编程新手,所以我提前道歉。我正在运行一个程序,并且遇到了 Java 中的 System.out.printf 方法的问题。我知道程序中的其他所有内容都正常工作(经过测试)。但是,这似乎不起作用。

错误是:

线程“main”中的异常 java.util.IllegalFormatConversionException: d != java.lang.Double 在 java.util.Formatter$FormatSpecifier.failConversion(未知来源) 在 java.util.Formatter$FormatSpecifier.printInteger(未知来源) 在 java.util.Formatter$FormatSpecifier.print(未知来源) 在 java.util.Formatter.format(未知来源) 在 java.io.PrintStream.format(未知来源) 在 java.io.PrintStream.printf(未知来源) 在 Advisor_Score.main(Advisor_Score.java:17)

我的代码是:

import java.lang.Math;
public class Advisor_Score 
    public static void main(String[] args) 
        double l[] = 101,1,1,1;
        double k[] = 102,2,2,4;
        double m[] = 103,5,5,5,5,5,5,5;
        double All_users[][]=l,k,m;
        double sum[]=new double [All_users.length];
        double [] raw_advisor=new double [All_users.length];
        double []advisor_score= new double [All_users.length];
        for (int i=0;i<All_users.length;i++)
                for(int j=1;j<All_users[i].length;j++)
                        sum[i]+=All_users[i][j];
                
                raw_advisor[i]=((sum[i]-(3*(All_users[i].length-1)))/4);
                advisor_score[i]= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor[i])));
                System.out.printf("%d: %d\n", All_users[i][0], advisor_score[i]);
                       
    

不确定为什么它不起作用。

【问题讨论】:

【参考方案1】:

%d代表一个整数;您想使用%f 进行双打。请参阅 Javadoc 中的 formatting string syntax

【讨论】:

%d 不是用于双精度的,这很不方便......毕竟double 以字母d 开头! :D @JamesSmith 我想;它代表decimal,而不是%x 十六进制或%o 八进制。 C 还允许您使用 %i 作为 %d 的“整数”同义词,但看起来 Java 没有 如果您使用%d 格式仅显示 Double 的整数值,您还必须将 Double 值转换为整数值:Double value = new Double(102.0); String toDisplay = String.format("%d", value.intValue()); 我们如何截断到小数位?【参考方案2】:

如果您的数据类型是bigDecimal,则必须使用:%g

【讨论】:

以上是关于Java 中 System.out.printf 命令的问题的主要内容,如果未能解决你的问题,请参考以下文章

java system.out.printf()的使用方法

Java printf没有打印加倍

java 浮点数指数表示法

java语言之输出数据的格式控制

java 格式化

java printf println equals方法 StringBuffer类 数转换为字符