2012-03-26 7 views
2

TNumberbox- und TSpinEdit-Rückgabewerte definiert als Typ single. Ich möchte diese Werte verwenden, um einfache Integer-Arithmetik durchzuführen, aber ich kann sie nicht erfolgreich in den verallgemeinerten Integer-Typ umwandeln, und Delphi gibt mir Kompilierungsfehler, wenn ich versuche, sie einfach als Ganzzahlen zu verwenden. Dieser Code zum Beispiel nicht mitDelphi TNumberbox gibt single zurück; Wie komme ich zu einer Standard-Ganzzahl?

"E2010 Inkompatible Typen: 'Int64' und 'Erweitert'":

var 
    sMinutes: single; 
    T: TDatetime; 
begin 
sMinutes :=Numberbox1.value; 
T :=incminute(Now,sMinutes); 

Alles, was ich hier tun möchte, ist der Benutzer geben Sie mir eine Anzahl von Minuten und erhöhen Sie dann einen Datetime-Wert entsprechend. Nichts, was ich versucht habe, ermöglicht es mir, diese Single auf diese Weise zu verwenden.

Was vermisse ich?

Antwort

5

gestutzt einfach den Wert vor der Verwendung:

var 
    Minutes: Integer; 
    T: TDateTime; 
begin 
    Minutes := Trunc(NumberBox1.Value); 
    T := IncMinute(Now, Minutes); 
end; 

Je nach Ihren speziellen Bedürfnissen, müssen Sie möglicherweise Round stattdessen verwenden. Es wird korrekt auf den nächsten ganzzahligen Wert gerundet, wobei sichergestellt wird, dass 1.999999999999 korrekt zu Integer 2 wird; Trunc würde stattdessen 1 ergeben. (Danke an Heartware für diese Erinnerung.)

var 
    Minutes: Integer; 
    T: TDateTime; 
begin 
    Minutes := Round(NumberBox1.Value); 
    T := IncMinute(Now, Minutes); 
end; 

Trunc und Round sind in der System Einheit.

+0

Nun, das war einfach! Klappt wunderbar. Danke für die sofortige Antwort. – user1248816

+0

Ich würde jedoch stattdessen ROUND verwenden, da ein Wert von 1,999999 wahrscheinlich richtiger ist, wenn er als 2 und nicht als 1 interpretiert wird. Und ein Wert "sehr nahe an einem ganzzahligen Wert, aber nicht ganz da" ist in der Tat sehr gut möglich Gleitkommawerte - auch wenn Sie das Steuerelement so eingerichtet haben, dass nur ganzzahlige Werte zulässig sind. – HeartWare

+0

@HeartWare, das ist ein guter Punkt. Sie sollten das als eine alternative Antwort hinzufügen. Wenn Sie aus irgendeinem Grund nicht möchten, werde ich meine Antwort bearbeiten, um die Informationen bereitzustellen. –