Dubbele % opmaakvraag voor printf in Java

%sis een tekenreeks in printf, en %d is een decimaalteken waarvan ik dacht…maar toen ik

invoerde

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

..er wordt een uitzondering gegenereerd die me vertelt dat %d!= lang.double. Ideeën?


Antwoord 1, autoriteit 100%

%dis voor gehele getallen, gebruik in plaats daarvan %f, het werkt voor zowel floatals doubletypen:

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

Antwoord 2, autoriteit 42%

Ja, %dbetekent decimaal, maar het betekent decimaal getalsysteem, geen decimale punt.

Verder, als aanvulling op het vorige bericht, kun je ook het aantal decimale punten bepalen dat moet worden weergegeven. Probeer dit,

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

Raadpleeg voor meer informatie de API-documenten .


Antwoord 3, autoriteit 7%

Hier volgt de lijst met conversietekens die u in de printf kunt gebruiken:

%d – for signed decimal integer
%f – for the floating point
%o – octal number
%c – for a character
%s – a string
%i – use for integer base 10
%u – for unsigned decimal number
%x – hexadecimal number
%% – for writing % (percentage)
%n – for new line = \n

Antwoord 4, autoriteit 4%

Ja, %d is voor decimaal (geheel getal), dubbel verwacht %f. Maar gewoon %f gebruiken zal standaard tot precisie 6 zijn. Om alle precisiecijfers voor een dubbel af te drukken, kunt u het via een string doorgeven als:

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

of

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

Dit is wat println standaard doet:

System.out.println(d) 

(en beëindigt de regel)

Other episodes