Datatypes

Bewerkingen met kommagetallen op een computer gebeuren met een eindige nauwkeurigheid. Hoeveel deze nauwkeurigheid exact bedraagt, hangt af van welk datatype er gebruikt wordt. Binnen Java bestaan er twee datatypes die kommagetallen voorstellen, elk met een verschillende nauwkeurigheid:

Aangezien double-getallen de hoogste nauwkeurigheid bieden, is het aangeraden om deze steeds te verkiezen over float-getallen.

Bewerkingen en Afrondingsfouten

Omwille van deze beperkte nauwkeurigheid, kunnen afrondingsfouten optreden. Deze afrondingsfouten zijn te vermijden door tijdens bewerkingen nooit de tussenresultaten af te ronden. De enige plaats waar je mag afronden, is bij het uitprinten van het resultaat. In het boek wordt gebruik gemaakt van de Math methode round om getallen af te ronden. Een alternatief en mogelijks betere aanpak is gebruik maken van String formatting.

Afronden met Math methode

De Math.round() methode rond een getal of tot nul cijfers na de komma. Je kan deze methode ook gebruiken om af te ronden tot een aantal cijfers na de komma door het getal eerst te vermenigvuldigen met een veelvoud van 10, vervolgens af te ronden en nadien opnieuw te delen doo het zelfde veelvoud:

double input = 1205.6358;
System.out.println("salary : " + input);
double salary = Math.round(input * 100.0) / 100.0;
System.out.println("salary : " + salary);

String formatting

Het uitprinten van kommagetallen met een gekozen precisie kan met behulp van de String.format()-functie. Deze functie kan, zoals de naam aangeeft, een String opbouwen volgens een meegegeven formaat (format string). Deze format string kan simpele tekst zijn, maar ook enkele speciale tokens bevatten, beginnend met een procent-teken, die door de functie kunnen worden ge"interpreteerd.\

Enkele voorbeelden:

System.out.println(String.format("Geen speciale tokens."));
// Output: Geen speciale tokens.
int getal = 7;
System.out.println(String.format("Het cijfer %d is een int.", getal));
// Output: Het cijfer 7 is een int.
double pi = 3.1415926535;
System.out.println(String.format("Pi op 2 cijfers nauwkeurig: %.2f", pi));
System.out.println(String.format("Pi op 3 cijfers nauwkeurig: %.3f", pi));
// Output: Pi op 2 cijfers nauwkeurig: 3,14
// Output: Pi op 3 cijfers nauwkeurig: 3,142