Drop links or images here to add them to the editor.

Bewerkingen geven niet altijd het resultaat dat je verwacht. Eén van de verraderlijkste valkuilen in C# is de deling. Reken even mee:

Console.WriteLine(7 / 2);

Je zou misschien 3.5 verwachten, maar dit programma toont:

3

Waarom verdwijnt het deel na de komma?

In 7 / 2 zijn beide getallen gehele getallen (int). C# redeneert dan zo: “de invoer zijn gehele getallen, dus het resultaat moet ook een geheel getal zijn.” Hij voert daarom een gehele deling uit: hij deelt 7 door 2 en gooit alles achter de komma weg. 7 gedeeld door 2 is 3 met rest 1, en het deel na de komma (de ,5) valt gewoon weg.

Dat is geen afronding. C# rondt niet af naar het dichtstbijzijnde getal, hij kapt het stuk na de komma af:

UitdrukkingWiskundigC# (gehele deling)
7 / 23,53
9 / 51,81
25 / 46,256
1 / 20,50

Let op: 1 / 2 geeft 0, niet 0.5. Als je dat resultaat in een verdere berekening gebruikt, sleept de fout mee en klopt je eindantwoord niet meer.

Hoe los je dit op?

De truc is om C# te laten weten dat je met kommagetallen wil rekenen. Zodra minstens één van de twee getallen een kommagetal (double) is, voert C# een gewone deling uit en blijft het deel na de komma behouden.

Manier 1 — schrijf een getal als kommagetal

Schrijf 7.0 in plaats van 7 (of 5.0 in plaats van 5). Door de .0 wordt het een double:

Console.WriteLine(9.0 / 5.0);   // 1.8
Console.WriteLine(7.0 / 2);     // 3.5  (één kommagetal volstaat)

Manier 2 — gebruik een cast (double)

Werk je met variabelen, dan kan je een van de getallen tijdelijk als double laten behandelen met een cast: zet (double) voor het getal.

int teller = 9;
int noemer = 5;
Console.WriteLine((double)teller / noemer);   // 1.8

Beide manieren geven hetzelfde resultaat. Welke je kiest, hangt af van of je met vaste getallen of met variabelen werkt.

Wat als je net wél een geheel resultaat wil? Dan is de gehele deling precies wat je nodig hebt. In combinatie met de rest-operator % kan je er bijvoorbeeld een aantal seconden mee omzetten naar uren, minuten en seconden. Verderop in deze reeks gebruik je dat volop.