![]() |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Das komplette Zitat:
Zitat:
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Es ist aber nur jeweils der Kommentar falsch, die Methoden tun schon das, was ihr Name beschreibt.
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Hallo zusammen,
Zitat:
Daher teilte ich lediglich mit, dass ein Round() schön wäre. Ob jetzt wirklich sinnvoll, dass stellen wir beiseite, wenn er nur in Delphi programmiert. |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Zitat:
Da ist doch das DIV wesentlich ehrlicher und tut, was verlangt wird. |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Hallo zusammen,
Zitat:
Zitat:
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Zitat:
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Hallo zusammen,
Zitat:
Quick and dirty mit einem Button und 3 Editfeldern zum Nachbauen:
Delphi-Quellcode:
Wenn Du Ceil() nimmst, dann kommt nie 0 heraus, ausser der Dividend ist 0. Natürlich solltest Du auch noch vor der Teilung abfragen, ob der Divisor 0 ist, um einen Fehler zu vermeiden.
procedure TForm1.Button1Click(Sender: TObject);
var liNewValue: Integer; lfValue: Extended; begin lfValue := StrToInt(Edit1.Text) / StrToInt(Edit2.Text); if ((Ceil(lfValue) mod 2) = 0) then begin liNewValue := Ceil(lfValue); end else begin liNewValue := Ceil(lfValue) + 1; end; Edit3.Text := IntToStr(liNewValue); end; |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Also du benötigst ein abgewandelten Integer DIV
Delphi-Quellcode:
und kannst dann
function IntCeilDiv( Val1, Val2 : Integer ) : Integer;
begin Result := Val1 div Val2; if not ( Val1 mod Val2 = 0 ) then Inc( Result ); end;
Delphi-Quellcode:
Hab ich das so richtig verstanden?
procedure TForm1.Button1Click(Sender: TObject);
var liNewValue: Integer; begin liNewValue := IntCeilDiv( StrToInt(Edit1.Text), StrToInt(Edit2.Text) ); if not ( liNewValue mod 2 = 0 ) then Inc( liNewValue ); Edit3.Text := IntToStr(liNewValue); end; UPDATE So geht es auch und ist damit kurz und knackig und man sieht auch sofort, was beabsichtigt ist
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var liNewValue: Integer; begin liNewValue := Ceil( StrToInt(Edit1.Text) / StrToInt(Edit2.Text) ); if not ( liNewValue mod 2 = 0 ) then Inc( liNewValue ); Edit3.Text := IntToStr(liNewValue); end; |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Delphi-Quellcode:
... Du meinst also NOT
(x mod 2) = 0
![]() Zitat:
Delphi-Quellcode:
Vor dem Dividieren die Hälfte des Divisors hinzuaddiert, führt zu einem arithmetischem Aufrunden, da man den 0-Wert um die Hälfte (auf 0,5) verschoben hat. :stupid: (oder wie auch immer man das auf Mathematikdeutsch ausdrückt)
Result := (Val1 + 1) div 2;
Result := (Val1 + Val2 div 2) div Val2; |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Hallo zusammen,
Delphi-Quellcode:
So geht's natürlich auch, wenn Du den Float-Wert nicht noch für andere Berechnungen benötigst.
procedure TForm1.Button1Click(Sender: TObject);
var liNewValue: Integer; begin liNewValue := Ceil( StrToInt(Edit1.Text) / StrToInt(Edit2.Text) ); if not ( liNewValue mod 2 = 0 ) then Inc( liNewValue ); Edit3.Text := IntToStr(liNewValue); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 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