Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java printf和String.format中的空double和float_Java_Printf - Fatal编程技术网

Java printf和String.format中的空double和float

Java printf和String.format中的空double和float,java,printf,Java,Printf,在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:

在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版编译它;并安装了GCJRE版本4.7.2和OpenJDK JRE版本7u7-2.3.2a。;
编辑代码。现在是程序的全部代码。在我注意到其他代码中的浮点数问题后,我将其作为一个小测试程序编写。

这是我的代码和输出。我看没问题

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

  }

 }
给予


这很可能是GCJ中的一个bug。请看这里:


摆脱GCJ,使用OpenJDK或Sun/OracleJDK。

我认为您不需要双重签名您在第二个
printf
中使用
%
,您打算在那里使用
%f
,但您应该看到所有这些的输出。您可能会观察到的代码运行,否则,即println第一个
%a
应该是
%f
,但正如AmitD和pb2q所说,代码运行。这是您的全部代码吗?您使用的是哪个Java版本?您使用的是哪种语言环境?明确地尝试。我会说,因为没有问题,这就是答案。
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