2

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でコンパイルすることです。そして、gcjJREバージョン4.7.2とOpenJDKJREバージョン7u7-2.3.2aをインストールします。コードを編集しました。これで、プログラムのコード全体になりました。他のコードの浮動小数点数に関するこれらの問題に気付いた後、私はそれを小さなテストプログラムとして作成しました。

4

2 に答える 2

3

GCJのバグである可能性が高いです。ここを参照してください:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug = 561685

GCJを取り除き、OpenJDKまたはSun/OracleJDKを使用します。

于 2012-09-26T18:59:18.353 に答える
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
于 2012-09-26T18:04:14.353 に答える