繁体   English   中英

空double和float in printf和String.format

[英]empty double and float in printf and String.format

在Java中,当我向printfString.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。 我所知道的是:我用4.7.2版的gcc(gcj)编译了它; 并已安装gcj JRE版本4.7.2和OpenJDK JRE版本7u7-2.3.2a。 编辑了代码。 现在,它是程序的整个代码。 我在其他代码中注意到浮点数的这些问题后,将其编写为小型测试程序。

这很有可能是GCJ中的错误。 看到这里: http : //bugs.debian.org/cgi-bin/bugreport.cgi?bug=561685

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM