Wenn wir rechnen wollen, dann müssen wir genau darauf achten, dass wir auch das herausbekommen, was wir C# auch rechnen lassen wollen.
Unten findet ihr Quellcode, der sich etwas merkwürdig verhält.
In dem ersten Block (Zn. 1-3) wird das Ergebnis von 4 mal 100 geteilt durch 40 berechnet und ausgegeben. Das Ergebnis ist logischerweise 10.
Im zweiten Block (Zn. 5-7) wird das Ergebnis von 4 durch 40 * 100 berechnet und ausgeben. Das Ergebnis ist hier logischerweise 0.... Halt, Moment mal. Eigentlich haben wir hier doch nur die Abfolge Division und die Multiplikation vertauscht! Das Ergbnis müsste eigentlich das gleiche sein! Naja, stimmt nicht ganz. C# überprüft bei Divisionen, welche Typen bei der Division verwendet werden und entscheidet je nach Typ, was es machen soll. Dabei haben wir zwei Möglichkeiten zur Auswahl. Ist die Zahl, die geteilt werden soll:
- eine reelle Zahl (z. B.
double
), dann führt C# eine ganz normale Division durch, die wir aus dem Alltag kennen. Das Ergebnis ist also eine reelle Zahl (Dezimalzahl). - eine ganze Zahl (z. B.
int
), dann wird auch eine ganzzahlige Division durchgeführt. Das heißt: C# gibt zurück, wie oft eine komplett Zahl in eine andere Zahl hineinpasst. Das Ergebnis ist dann eben eine ganze Zahl.
Im zweiten Block teilen wir 4 (eine ganze Zahl) durch 40. C# berechnet also, wie oft die 40 komplett (ohne Rest) in die 4 passt. Das ist null mal und dementsprechend ist unsere Multiplikation danach: 0 * 100 = 0, wir erhalten also als Ergebnis ebenfalls Null.
Im letzten Block sehen wir, wie wir diese Problematik umgehen können. Wir setzen nach der 4 einfach einen Punkt, also 4.0. Dadurch sagen wir C#, dass es sich bei der 4 um eine reelle Zahl handelt und nun teilt C# die 4 auch so durch 40, dass eine reelle Zahl als Ergebnis ausgegeben wird und wir normal weiterrechnen können.
1
2
3
4
5
6
7
8
9
10
11
/* Ausgabe: 10 */
Console.WriteLine("4 * 100 / 40");
Console.WriteLine(4 * 100 / 40);
/* Ausgabe: 0 */
Console.WriteLine("4 / 40 * 100");
Console.WriteLine(4 / 40 * 100);
/* Ausgabe: 10 */
Console.WriteLine("4.0 / 40 * 100");
Console.WriteLine(4.0 / 40 * 100);