Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Integer/Extended inkompatible (https://www.delphipraxis.net/206371-integer-extended-inkompatible.html)

Nikodel 15. Dez 2020 10:21

Delphi-Version: 5

Integer/Extended inkompatible
 
hallo,

folgende Zeile ergibt den Compilierfehler "inkompatible Typen 'Integer' und 'Extended'":
Code:
var
  Beschr: String;
  nBl, I: Integer; // Anzahl Blanks
begin
  ...
  nBl := StrToInt(BreiteNamen.Text)/2-2;
Welche '2' ist denn hier Extended?

Nikodel

mkinzler 15. Dez 2020 10:26

AW: Integer/Extended inkompatible
 
Eine halbe Ganzzahl ist ein Extendend

Delphi-Quellcode:
nBl := Trunc(StrToInt(BreiteNamen.Text)/2)-2;
oder Round

haentschman 15. Dez 2020 10:27

AW: Integer/Extended inkompatible
 
Hallöle...:wink:

das / ergibt immer Nachkommastellen. Und dann ist es ein Extended. :zwinker:

Nikodel 15. Dez 2020 10:35

AW: Integer/Extended inkompatible
 
danke, ist ja eigentlich klar. Dann stand ich wohl auf der Leitung :wink:

Nikodel

TomyN 15. Dez 2020 11:02

AW: Integer/Extended inkompatible
 
By the way, Int / Int ergibt zwar in Delphi (noch?) Extended, aber in (fast) allen anderen Sprachen wieder einen Int. Daher habe ich mir in so einer Situation angewöhnt, den Divisor als rationale Zahl ( d.h. 2.0 statt 2 ) zu schreiben, damit es mir (und evtl. auch dem Compiler) klar ist.

Neutral General 15. Dez 2020 11:23

AW: Integer/Extended inkompatible
 
Ich bin erstaunt, dass das noch niemand erwähnt hat aber es gibt auch eine reine Integer-Division in Delphi:
Delphi-Quellcode:
nBl := StrToInt(BreiteNamen.Text) div 2 - 2;

Allerdings kommt da dann logischerweise immer eine Ganzzahl raus (Integer). d.h.
Delphi-Quellcode:
5 div 2 = 2

Delphi.Narium 15. Dez 2020 11:33

AW: Integer/Extended inkompatible
 
Das Ergebnis von DIV dürfte Trunc entsprechen, kann aber um 1 von Round abweichen.

Man muss also schon wissen, was man bei der Division von Integerwerten als Ergebnis erwartet.

DIV und Trunc ergeben immer das "abgerundete" Ergebnis, also den ganzszahligen Vorkommaanteil. Round rundet ggfls. auf die nächsthöhere Ganzzahl auf.
Delphi-Quellcode:
i := 42 div 9; // -> i = 4
i := Trunc(42 / 9); // -> i = 4
i := Round(42 / 9); // -> i = 5

Neutral General 15. Dez 2020 11:44

AW: Integer/Extended inkompatible
 
Kurzer Ergänzung: Wenn man eh Integer hat und als Ergebnis auch nur einen Integer benötigt also quasi das abgerundete Ergebnis was man auch durch Trunc erhalten würde, dann sollte man besser direkt div nutzen. Es macht keinen Sinn den PC mit einer Gleitkommaoperation zu belasten wenn man am Ende doch wieder nur den Integer haben will.

Moombas 15. Dez 2020 11:46

AW: Integer/Extended inkompatible
 
Wieso ggf.? Round richtet sich doch meines Wissens nach der mathematischen Vorgabe, also das ab 0,5 aufgerundet wird.
Oder habe ich das falsch im Gedächtnis?

DeddyH 15. Dez 2020 11:47

AW: Integer/Extended inkompatible
 
Für eine Halbierung könnte man auch einfach um eins nach rechts shiften :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.
Seite 1 von 2  1 2      

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