【问题标题】:empty double and float in printf and String.format在 printf 和 String.format 中为空 double 和 float
【发布时间】:2012-09-18 10:14:20
【问题描述】:

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

【问题讨论】:

  • 我认为你不需要双 % 符号
  • 您在第二个 printf 中使用 %,您打算在其中使用 %f,但您应该会看到所有这些的输出。
  • 代码运行你可能有观察,否则即。 println
  • 第一个%a应该是%f,但是就像AmitD和pb2q说的那样,代码运行。
  • 这是你的全部代码吗?您使用的是哪个 Java 版本?您使用的是哪个语言环境?明确地尝试Locale.ROOT

标签: java printf


【解决方案1】:

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

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

【讨论】:

    【解决方案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
    

    【讨论】:

    • 我会说没有问题,这就是答案。
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2010-10-26
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多