Fehler bei Rechenoperation

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Giss
Beiträge: 22
Registriert: Sa 26. Mär 2011, 23:25
OS, Lazarus, FPC: Linux (L 0.9.28 FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Osnabrück

Fehler bei Rechenoperation

Beitrag von Giss »

Hallo zusammen,

ich habe eine Problem. Eine bestimmte Anweisung funktioniert nicht und ich weiß gerade nicht, warum. Könnt Ihr mir helfen?

Code: Alles auswählen

 
for y := 1 to StringGrid.RowCount-1 do
StingGrid1.Cells[6,y]:=FloatToStr(RoundTo(StrToFloat(StringGrid1.Cells[0,y])*StrToFloat(StringGrid1.Cells[4,y]) Div 100*(100+5) ,-2));
 
Die Unit Math habe ich eingebunden.

Als Fehlermeldung kommt bei der ersten Multiplikation:

Code: Alles auswählen

 
unit8.pas(64,88) Error: Incompatible types: got "Extended" expected "LongInt"
 

Benutzeravatar
theo
Beiträge: 11004
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler bei Rechenoperation

Beitrag von theo »

Vielleicht würde es schon helfen, dass ganze etwas zu entflechten und sorgfältiger anzugehen.

Wie heisst das Ding jetzt? Sind es mehrere?

Ich finde in diesen zwei Zeilen drei Namen für StringGrids:

StringGrid
StingGrid1
StringGrid1

So kann man dir nicht helfen.

Giss
Beiträge: 22
Registriert: Sa 26. Mär 2011, 23:25
OS, Lazarus, FPC: Linux (L 0.9.28 FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Osnabrück

Re: Fehler bei Rechenoperation

Beitrag von Giss »

Mein Fehler.

Das Ding heißt StringGrid1 - Danke.

Der Fehler mit den inkompatiblen Datentypen bleibt davon jedoch leider unberührt.

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: Fehler bei Rechenoperation

Beitrag von Michl »

"Div" geht nur bei ganzen Zahlen, müsstest du durch ein "/" ersetzen!

Code: Alles auswählen

  caption:=FloatToStr(RoundTo(100.33 Div 100*(100+5) ,-2));  //geht nicht
  caption:=FloatToStr(RoundTo(100 Div 100*(100+5) ,-2));     //geht
  caption:=FloatToStr(RoundTo(100.33 / 100*(100+5) ,-2));    //geht   

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5261
Registriert: Fr 8. Apr 2011, 09:01

Re: Fehler bei Rechenoperation

Beitrag von wp_xyz »

Die Operation "Div" ist nur für Integer-Typen verfügbar, nicht für Floating Point. Einen solchen Datentyp hast du erhalten, weil du "StrToFloat" verwendest. "StrToInt" würde funktionieren. Oder du belässt es beim "StrToFloat" und ersetzt das "Div" durch "/".

Offenbar möchtest du das Produkt von zwei Zahlen im Grid auf zwei Nachkommastellen runden. Das genau macht die Funktion "RoundTo". Du versuchst aber zusätzlich noch, manuell zu runden. Ich bezweifle, ob das so nötig ist.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2847
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fehler bei Rechenoperation

Beitrag von m.fuchs »

div akzeptiert nur Integer-Werte als Operanden. Benutze stattdessen /.

Edit: Heute sind ja viele hier. :wink:
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Giss
Beiträge: 22
Registriert: Sa 26. Mär 2011, 23:25
OS, Lazarus, FPC: Linux (L 0.9.28 FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Osnabrück

Re: Fehler bei Rechenoperation

Beitrag von Giss »

Vielen Dank Michl, das war es.

:oops:

PS: Allen anderen natürlich auch :)

Antworten