Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 32 div Teiler = 0 ? (https://www.delphipraxis.net/65665-32-div-teiler-%3D-0-a.html)

xZise 19. Mär 2006 17:58


32 div Teiler = 0 ?
 
Folgendes:

Delphi-Quellcode:
procedure TFFreggels.Zoomen(Teiler : Integer);
var
  [...]
begin
  [...]
  Showmessage(IntToStr(Round(32 / Teiler)));
  Showmessage(IntToStr(32 div Teiler));
  Showmessage(IntToStr(Teiler));
     Held10.Height := 32 div Teiler;
    Held10.Width := 32 div Teiler;


  //Objektkarte
  with Held10 do begin


    Showmessage(IntToStr(Held10.Height));
    Canvas.StretchDraw(Rechteck, HOben.Picture.Graphic);
  end;
end;
Sieht ein bisschen Chaotisch aus, ist es aber nicht ;)

Folgendes: Teiler = 1
Nachrichten:
  1. 32
  2. 32
  3. 1
  4. 0

Also ich habe da keinen Fehler Entdeckt, aber dennoch ist Held10.Height = 0 !!

idontwantaname 19. Mär 2006 18:41

Re: 32 div Teiler = 0 ?
 
Div rundet auch :wink:

Sharky 19. Mär 2006 18:43

Re: 32 div Teiler = 0 ?
 
Zitat:

Zitat von idontwantaname
Div rundet auch

Hai idontwantaname,

kannst Du mal beschreiben warum DIV "rundet"?

mkinzler 19. Mär 2006 18:45

Re: 32 div Teiler = 0 ?
 
Dann rundet es aber gewaltig den 32/1 ist 32 und nicht 0!

JasonDX 19. Mär 2006 18:47

Re: 32 div Teiler = 0 ?
 
richtig, div rundet nicht, sondern schneidet die Kommastellen ab ;)
aber das is auch nicht wirklich das Problem, schließlich müsst bei 32 div 1 auch nichts gerundet werden :gruebel:

@Topic: Ich bezweifle, dass es am div liegt. Schließlich wird der Term 32 div 1 erst ausgerechnet, (also kommt 32 raus), und dann zugewiesen. Probier einfach mal, 32 direkt zuzuweisen (also Held10.Height := 32;), dann dürfte das selbe Ergebnis reinkommen. Das Problem liegt also am Setter von Held10.Height. Von welchem Typ is Held10?

greetz
Mike

xZise 19. Mär 2006 19:06

Re: 32 div Teiler = 0 ?
 
Vom TImage!

Und es ist an sich auch egal ob es rundet ;) oder abschneidet... fakt ist nur das er aus 32 div 1 = 0 macht...

Und es ist auch bei anderen "Teilern"!

Und schonmal danke ;) Ich habe mich auch gewundert ^^

[edit]Mit direkter Zuweisung (Held10.Height) ist es auch 32... :( [/edit]

[edit]Doch nicht ;) Falscher Wert überprüft >>> Egal ob statischer oder variabler Wert! [/edit]

Die Muhkuh 19. Mär 2006 19:07

Re: 32 div Teiler = 0 ?
 
Zitat:

Zitat von xZise
Und es ist an sich auch egal ob es rundet ;) oder abschneidet... fakt ist nur das er aus 32 div 1 = 0 macht...

Delphi-Quellcode:
ShowMessage(IntToStr(32 div 1)); // Ergibt 32
[edit] Haste schonmal ShowMessage(IntToStr(Teiler)) gemacht? [/edit]

xZise 19. Mär 2006 19:09

Re: 32 div Teiler = 0 ?
 
Witzbold (sry, konnte ich mir nicht verkneifen) 1. Post Delphicode Zeile 8!

Die Muhkuh 19. Mär 2006 19:10

Re: 32 div Teiler = 0 ?
 
Zitat:

Zitat von xZise
Witzbold (sry, konnte ich mir nicht verkneifen) 1. Post Delphicode Zeile 8!

:oops: Übersehen sorry.

xZise 19. Mär 2006 19:12

Re: 32 div Teiler = 0 ?
 
Wenn ich das nochmal zusammenfassen darf:

Bei jeder Zuweisung, egal welcher Art, ist der Wert (habe bisher nur "Height" überprüft) = 0!

alzaimar 19. Mär 2006 19:23

Re: 32 div Teiler = 0 ?
 
Zitat:

Zitat von JasonDX
@Topic: Ich bezweifle, dass es am div liegt. Schließlich wird der Term 32 div 1 erst ausgerechnet, (also kommt 32 raus), und dann zugewiesen. Probier einfach mal, 32 direkt zuzuweisen (also Held10.Height := 32;), dann dürfte das selbe Ergebnis reinkommen. Das Problem liegt also am Setter von Held10.Height.

Daran liegt es. Wozu diskutieren, wo die Lösung doch so nah?
Zitat:

Zitat von xZise
fakt ist nur das er aus 32 div 1 = 0 macht...

Fakt ist (so ein idiotisches Kopieren von Werbesprüchen, brr..), das der Setter einfaches setzen der Größe so nicht hinnimmt. Wenn z.B. die Eigenschaft AutoSize von TImage den Wert 'True' hat, und Du z.B. ein leeres Bitmap zugewiesen hast, dann hat TImage dieses Verhalten.

Du kannst aber beruhigt sein, 'DIV' arbeitet korrekt, die Zuweisung auch, und bis auf wenige exotische Ausnahmen dürfte jede Kombination von Assemblerbefehlen auch korrekt abgearbeitet weren. Es liegt hier also ein einfaches Logikproblem vor.

xZise 19. Mär 2006 19:42

Re: 32 div Teiler = 0 ?
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von JasonDX
@Topic: Ich bezweifle, dass es am div liegt. Schließlich wird der Term 32 div 1 erst ausgerechnet, (also kommt 32 raus), und dann zugewiesen. Probier einfach mal, 32 direkt zuzuweisen (also Held10.Height := 32;), dann dürfte das selbe Ergebnis reinkommen. Das Problem liegt also am Setter von Held10.Height.

Daran liegt es. Wozu diskutieren, wo die Lösung doch so nah?

Weil ich das ansonsten schon im Desginmodus einstellen könnte!

Zitat:

Zitat von alzaimar
Zitat:

Zitat von xZise
fakt ist nur das er aus 32 div 1 = 0 macht...

Fakt ist (so ein idiotisches Kopieren von Werbesprüchen, brr..), das der Setter einfaches setzen der Größe so nicht hinnimmt. Wenn z.B. die Eigenschaft AutoSize von TImage den Wert 'True' hat, und Du z.B. ein leeres Bitmap zugewiesen hast, dann hat TImage dieses Verhalten.

Sorry, aber das war keine Absicht!


So... Und nun wie es schon alzaimar gesagt hatte, lag es daran, dass die Images Autosize = true waren...

alzaimar 19. Mär 2006 20:05

Re: 32 div Teiler = 0 ?
 
Zitat:

Zitat von xZise
Zitat:

Zitat von alzaimar
Zitat:

Zitat von xZise
fakt ist nur das er aus 32 div 1 = 0 macht...

Fakt ist (so ein idiotisches Kopieren von Werbesprüchen, brr..), ...

Sorry, aber das war keine Absicht!

Das ist ja grad das Perfide an Werbesprüchen :zwinker:
Schön, das das Problem gelöst ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 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