Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Kommazahlen
MisterX91 - Di 01.06.10 17:12
Titel: Kommazahlen
Hallo, ich habe vor kurzer Zeit angefangen mit Delphi zu programmieren und bin totaler Anfänger.
Ich habe nach einer Methode gesucht, mit der man prüfen kann, ob eine Zahl eine Kommazahl ist, doch wenn ich folgendes eintippe: "if ((c * 2) mod 2) = 0 then...", meldet Delphi: "Operator not applicable to this operand type" und "Comparing signed and unsigned types - widened both operands".
Was mache ich falsch? Ich finde einfach keine Lösung.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 01.06.2010 um 23:17
MaPsTaR - Di 01.06.10 18:08
Hallo,
Was sagt dir denn die Fehlermeldung
Zitat: |
Operator not applicable to this operand type |
?
...
Zitat: |
Operator ist auf diesen Operandentyp nicht anwendbar |
soweit ich weiß arbeiten
mod und
div nur mit ganzen Zahlen...
vielleicht gibt es noch ein elegantere Lösung, aber das hier sollte seinen Zweck erfüllen...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var int_dummy: integer; begin if TryStrToInt(Edit1.Text, int_dummy) then ShowMessage('ganze Zahl') else ShowMessage('reelle Zahl'); |
LSanchez - Di 01.06.10 18:37
beide Operanden müssen "Integer" sein. Wenn C "Double" ist, ist C*2 auch "Double"
Gruß
L. Sanchez
jaenicke - Mi 02.06.10 09:06
MisterX91 hat folgendes geschrieben : |
Ich habe nach einer Methode gesucht, mit der man prüfen kann, ob eine Zahl eine Kommazahl ist |
Wenn du schon eine Zahl hast, dann gibt es da keine Möglichkeit mehr. Denn durch die Ungenauigkeit bei der Binärdarstellung einer Dezimalzahl hast du dann auch bei ursprünglich ganzen Zahlen in der Regel Nachkommastellen.
Es gibt zwei Möglichkeiten:
Entweder wie bereits gezeigt wurde bereits bei der Umwandlung aus einem String prüfen.
Oder wenn du nur eine Fließkommazahl hast den Nachkommaanteil prüfen ob der sehr klein ist:
Delphi-Quelltext
1: 2:
| if IsZero(Frac(C)) then ShowMessage('Ganze Zahl in C'); |
Gammatester - Mi 02.06.10 11:14
jaenicke hat folgendes geschrieben : |
Denn durch die Ungenauigkeit bei der Binärdarstellung einer Dezimalzahl hast du dann auch bei ursprünglich ganzen Zahlen in der Regel Nachkommastellen. |
Das ist nicht ganz richtig: Double-Zahlen stellen ganzzahlige Werte bis +-(2^53-1)
exakt dar (also
alle integer), Extended entsprechend bis 2^64-1 also
alle int64. Ein Problem kännte es demnach allenfalls geben, wenn ein Ganzzahlwert größer als 2^53 (also mehr als 16 Dezimalstellen) in ein Double gepackt werden sollen. Deshalb reicht wohl in den meisten Fällen die Regel:
c ist eine ganze Zahl wenn frac(c)=0 ist.
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!