Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Multiplizieren und Dividieren geht nicht
Leathl - Sa 01.03.03 15:34
Titel: Multiplizieren und Dividieren geht nicht
---
derDoc - Sa 01.03.03 15:39
Es gibt 2 Arten zu Teilen:
1. div = ganzahlige Division => 10 div 3 = 3
2. / = Division => 10 / 3 = 3,33333333333...
Jetzt kommt es auf den Typ der
Ergebnisvariable an. Bei Ganzahl-Variablen (Integer, Cardinal, Byte) musst du
div benutzen.
Bei Fließkomma-Variablen (real, single, double, extended) musst du
/ benutzen.
Beispiel:
Quelltext
1: 2: 3:
| a, b, c: Integer; c := a div b //funktioniert einwandfrei c := a / b //ergibt deinen Fehler |
Leathl - Sa 01.03.03 15:41
---
Leathl - Sa 01.03.03 15:58
---
derDoc - Sa 01.03.03 16:04
Wenn du deine Variablen als reelle Zahlen deklariert hast, musst du / zum dividieren benutzen.
Leathl - Sa 01.03.03 16:10
---
Leathl - Sa 01.03.03 16:21
---
derDoc - Sa 01.03.03 16:32
Ich rechne dir das mal vor:
60 div 21 = 2
da 60 / 21 = 2,857142 und
div alles hinter dem Komma abschneidet
| Zitat: |
| a div Gold * Goldbb |
60 div 21 = 2 * 400 = 800
alles immer schön der Reihe nach
| Zitat: |
| a div Gold * Goldbb div a |
60 div 21 = 2 * 400 = 800 div 60 = 13
da 800 / 60 = 13,33333 und wie gesagt
div die Nachkommastellen abschneidet.
Eine Möglichkeit wäre
Quelltext
1:
| (a div Gold) * (Goldbb div a) |
derDoc - Sa 01.03.03 16:39
Hier sind die zwei Möglichkeiten für die gleiche Rechnung:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Gold, Goldbb, Goldd, a: Integer; begin Gold := 21; Goldbb := 400; a := 60; Goldd := a div Gold * Goldbb div a; //Das Ergebniss ist 13 end; |
Und nun für reelle Zahlen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Gold, Goldbb, Goldd, a: Real; begin Gold := 21; Goldbb := 400; a := 60; Goldd := a / Gold * Goldbb / a; //Das Ergebniss ist 19,04761905 end; |
Hier siehst du den Unterschied zwischen
div und
/.
Leathl - Sa 01.03.03 16:39
---
Leathl - Sa 01.03.03 16:45
---
Anonymous - Sa 01.03.03 16:45
@Leathl
Bist du dir im klaren was du rechnest? Oder tippst du die ganze Zeit nur herum?
Entweder reche ich mit Integer, dann weiß ich, daß die Werte gekürzt werden. Oder ich rechner Real und schneide zum Schluß die Nachkommastellen ab.
Guck dir noch mal ganz dringend an was Integerzahlen sind.
Tip:
Quelltext
1:
| x := Trunc( (a / Gold) * (Goldbb / a) ); |
Ergebnis ist dann 19.
derDoc - Sa 01.03.03 16:47
Wie schon beschrieben benutze Variablen der Typen Single, Double, Real oder Extended und als Operator /. Dann hast du das genaue Ergebniss deiner Rechnung.
Wenn du umbedingt ein glattes Ergebniss haben musst, dann benutze die Möglichkeit, die dir Popov beschrieben hat.
Und zu deinem String, wenn du ein Integer Ergebniss hast, dann machst du das mit IntToStr zu einem String, oder wenn du ein Real Ergebniss hast, dann geht das mit FloatToStr.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!