Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Operator ist auf diesen Operandentyp nicht anwendbar!? (https://www.delphipraxis.net/79692-operator-ist-auf-diesen-operandentyp-nicht-anwendbar.html)

condor 26. Okt 2006 15:30


Operator ist auf diesen Operandentyp nicht anwendbar!?
 
wieso erhalte ich beim Compilieren unter anderem den Fehler: "Operator ist auf diesen Operandentyp nicht anwendbar" ? Damit meint der Compiler die letzte Zeile



Delphi-Quellcode:
procedure TPTurm.setsize(mysize:word);
   var raster:word;
       I:word;
       begin
       Fsize:=mysize;
       width:=mysize;
       raster:=mysize div 50;
       height:=14*raster*mysize;
       for I := 0 to valu-1 do begin
        with steine[i] do begin
          ...
          width:=raster*(i+3);
          left:=8.5 div 50 -(width div 2);
Sorry, bin Delphi-Anfänger.

dataspider 26. Okt 2006 15:33

Re: Operator ist auf diesen Operandentyp nicht anwendbar!?
 
Hi,

ich denke mal, weil Left einen Integer will, deine Berechnung aber ein Real liefert.
Damit müsste noch ein Trunc drumrum...

Cu, Frank

3_of_8 26. Okt 2006 15:34

Re: Operator ist auf diesen Operandentyp nicht anwendbar!?
 
Weil du auf einem Gleitkommatypen keine Ganzzahldivision ausführen kannst. Ersetze das erste div duch ein /.

Danach musst du noch mit einer der unzähligen Rundungsfunktionen das ganze zu einem Integer konvertieren.

Namenloser 26. Okt 2006 15:35

Re: Operator ist auf diesen Operandentyp nicht anwendbar!?
 
Zitat:

Zitat von condor
Delphi-Quellcode:
left:=8.5 div 50 -(width div 2);

Du musst unterscheiden zwischen Gleitkommazahlen und ganzen Zahlen.
Left und Width z.b. sind ganze Zahlen. 8.5 ist eine Kommazahl.

Div funktioniert nur mit ganzen Zahlen. Für gleitkommazahlen musst du / benutzen.
Richtig wäre es so:
Delphi-Quellcode:
left:=round(8.5 / 50 -(width div 2));
(round rundet die entstandene Kommazahl, weil Left ja nur ganze Zahlen akzeptiert)

edit: Hä, weiso war da kein Kasten o.O?

Cöster 26. Okt 2006 17:42

Re: Operator ist auf diesen Operandentyp nicht anwendbar!?
 
Zitat:

Zitat von NamenLozer
Delphi-Quellcode:
left:=round(8.5 / 50 -(width div 2));

8,5/50 wird aber durch Round immer auf 1 gerundet, bei Trunc wär es 0. Man könnte also sofort 1 oder 0 schreiben.
Sinn würde das nur machen, wenn du nicht width div 2, sondern width/2 teilen würdest.

Amateurprofi 27. Okt 2006 16:50

Re: Operator ist auf diesen Operandentyp nicht anwendbar!?
 
Zitat:

Zitat von Cöster
8,5/50 wird aber durch Round immer auf 1 gerundet.

nein, auf 0

Cöster 27. Okt 2006 19:34

Re: Operator ist auf diesen Operandentyp nicht anwendbar!?
 
Zitat:

Zitat von Amateurprofi
Zitat:

Zitat von Cöster
8,5/50 wird aber durch Round immer auf 1 gerundet.

nein, auf 0

Jo, hast Recht, da hab ich nen Fehler gemacht. Ich dachte immer, Round rundet AUF und Trunc AB. Aber Round rundet immer korrekt, bei Komma 5 auf die gerade Zahl. Trunc immer ab, bei negativen Zahlen auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz