web-dev-qa-db-ja.com

Javaでのprintfの二重%形式の質問

%sprintfの文字列で、%dは10進数です...

writer.printf("%d dollars is the balance of %s\r\n", bal, nm);

..例外がスローされて、%d!= lang.double。アイデア?

24
D. Spigle

%dは整数に使用する%f代わりに、floatdoubleタイプの両方で機能します。

double d = 1.2;
float f = 1.2f;
System.out.printf("%f %f",d,f); // prints 1.200000 1.200000
58
codaddict

はい、%dは10進数を意味しますが、小数点ではなく10進数システムを意味します。

さらに、前の投稿を補完するものとして、表示する小数点の数を制御することもできます。これを試して、

System.out.printf("%.2f %.1f",d,f); // prints 1.20 1.2

詳細については、 APIドキュメント を参照してください。

24
Adeel Ansari

はい、%dは10進数(整数)用で、doubleは%fを想定しています。しかし、単に%fを使用すると、デフォルトで最大精度6になります。倍精度のすべての精度桁数を出力するには、文字列で次のように渡します。

System.out.printf("%s \r\n",String.valueOf(d));

または

System.out.printf("%s \r\n",Double.toString(d));

これはデフォルトでprintlnが行うことです:

System.out.println(d) 

(そして、行を終了します)

2
Andy