在Java中,当我向printf
或String.format
提供浮点变量时,它什么也没有提供。举例说明:
public class test {
public static void main(String arg[]) {
double d = 123.456;
System.out.println("println: " + d + " " + (int) d);
System.out.printf("printf as int: %d%n", (int) d);
System.out.printf("printf with %%f: %f%n", d);
System.out.printf("printf with %%e: %e%n", d);
System.out.printf("printf with %%g: %g%n", d);
System.out.printf("printf with %%a: %a%n", d);
}
}
给出
in println: 123.456 123
in printf as int: 123
in printf with %f:
in printf with %e:
in printf with %g:
in printf with %a:
正如您所看到的,它确实适用于println
,但它在printf上失败了。与String.format
相同。如果我提供宽度和精度,它会做同样的 - 什么也不提供。
我做错了什么?
编辑: 我正在使用en_US.UTF-8语言环境; 我不确定我使用的Java版本。我所知道的是:我用gcc(gcj)编译它,版本4.7.2;并安装了gcj JRE版本4.7.2和OpenJDK JRE版本7u7-2.3.2a。 编辑了代码。现在它是该程序的整个代码。在我注意到其他代码中浮点数的这些问题后,我把它写成了一个小测试程序。
答案 0 :(得分:3)
很有可能它是GCJ中的一个错误。见这里:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=561685
摆脱GCJ并使用OpenJDK或Sun / OracleJDK。
答案 1 :(得分:2)
这是我的代码和输出。我没有看到问题。
package foo;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
double d = 123.456;
System.out.println("in println: " + d + " " + (int) d);
System.out.printf("in printf as int: %d%n", (int) d);
System.out.printf("in printf with %%f: %a%n", d);
System.out.printf("in printf with %%e: %e%n", d);
System.out.printf("in printf with %%g: %g%n", d);
System.out.printf("in printf with %%a: %a%n", d);
}
}
给出
in println: 123.456 123
in printf as int: 123
in printf with %f: 0x1.edd2f1a9fbe77p6
in printf with %e: 1.234560e+02
in printf with %g: 123.456
in printf with %a: 0x1.edd2f1a9fbe77p6