![]() |
Delphi-Version: 5
Integer/Extended inkompatible
hallo,
folgende Zeile ergibt den Compilierfehler "inkompatible Typen 'Integer' und 'Extended'":
Code:
Welche '2' ist denn hier Extended?
var
Beschr: String; nBl, I: Integer; // Anzahl Blanks begin ... nBl := StrToInt(BreiteNamen.Text)/2-2; Nikodel |
AW: Integer/Extended inkompatible
Eine halbe Ganzzahl ist ein Extendend
Delphi-Quellcode:
oder Round
nBl := Trunc(StrToInt(BreiteNamen.Text)/2)-2;
|
AW: Integer/Extended inkompatible
Hallöle...:wink:
das / ergibt immer Nachkommastellen. Und dann ist es ein Extended. :zwinker: |
AW: Integer/Extended inkompatible
danke, ist ja eigentlich klar. Dann stand ich wohl auf der Leitung :wink:
Nikodel |
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.
|
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
|
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 |
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.
|
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? |
AW: Integer/Extended inkompatible
Für eine Halbierung könnte man auch einfach um eins nach rechts shiften :wink:
|
AW: Integer/Extended inkompatible
Zitat:
ggfls. -> ab 0,5 aufrunden, sonst abrunden. ggfls. -> es kommt drauf an oder eventuell oder unter gewissen Umständen oder so 'ne Art "entschiedenes Sowohlalsauch" ;-) DIV und Trunc: immer abrunden. Round: ergebnisentsprechend auf- oder abrunden. |
AW: Integer/Extended inkompatible
Zitat:
|
AW: Integer/Extended inkompatible
Zitat:
Ja. Round nutzt standardmäßig Bankers-Round, also "gerecht" verteilt quasi abwechselnd bei 0,5 auf- und/oder abrunden. (gerade buw. ungerade Zahlen) Und man kann mit ![]() ![]() |
AW: Integer/Extended inkompatible
Um nun alle Möglichkeiten genannt zu haben und damit das Thema nicht ewig auszuweiten, sei noch RoundTo, Floor und (bedingt) Ceil genannt. Aber wirklich weiter bringt das den Nikodel auch nicht. Nur wir konnten wieder einmal zeigen, was wir alles Wissen.
|
AW: Integer/Extended inkompatible
Zitat:
Kommt nur drauf an wie gerundet werden soll und welchen Typ er nun wirklich am Ende braucht. * Eines teilt ganzzahlig und belässt den Integertypen * Einiges rundet, aber der Typ bleibt ein Float * Anderes rundet und ändert den Typ in einen Integer * Manches rundet und ändert den Typ, aber nicht so, wie es gesagt wurde, und manchmal auch ganz anders * ... Es gab/gibt auch Fremdkomponenten/-codes, die grob fahrlässig permanent am SetRoundMode rumpfuschen und so, unbewusst für den Entwickler, das Verhalten des kompletten Programms verändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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