web-dev-qa-db-fra.com

Double% question de formatage pour printf dans Java

%s est une chaîne dans printf, et% d est une décimale que je pensais ... pourtant lors de la mise en

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

..une exception est levée en me disant que %d! = lang.double. Des idées?

24
D. Spigle

%d est pour les entiers, utilisez %f à la place, il fonctionne pour les types float et double:

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

Oui, %d signifie décimal, mais cela signifie système de nombres décimaux , pas un point décimal.

De plus, en complément de l'ancien article, vous pouvez également contrôler le nombre de décimales à afficher. Essaye ça,

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

Pour plus d'informations, reportez-vous aux documentation API .

24
Adeel Ansari

Oui,% d est décimal (entier), attendez deux fois% f. Mais en utilisant simplement% f par défaut jusqu'à la précision 6. Pour imprimer tous les chiffres de précision pour un double, vous pouvez le passer via une chaîne comme:

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

ou

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

C'est ce que println fait par défaut:

System.out.println(d) 

(et termine la ligne)

2
Andy