Delphi TNumberbox返回单个; 如何获得标准整数?

use*_*816 2 delphi delphi-xe2 firemonkey

TNumberbox和TSpinEdit返回定义为单一类型的值.我想使用这些值来进行简单的整数运算,但是我不能将它们成功地转换为更通用的整数类型,如果我尝试将它们用作整数,Delphi会给出编译时错误.例如,此代码失败了

"E2010不兼容类型:'Int64'和'扩展'":

var
    sMinutes: single;
    T: TDatetime;
begin
sMinutes :=Numberbox1.value;
T :=incminute(Now,sMinutes);
Run Code Online (Sandbox Code Playgroud)

我想在这里做的就是让用户给我一些时间,然后相应地增加一个日期时间值.我尝试过的任何东西都不能让我以这种方式使用那个单曲.

我错过了什么?

Ken*_*ite 5

只需截断该值,然后再使用它:

var
  Minutes: Integer;
  T: TDateTime;
begin
  Minutes := Trunc(NumberBox1.Value);
  T := IncMinute(Now, Minutes);
end;
Run Code Online (Sandbox Code Playgroud)

根据您的特定需求,您可能需要使用Round.它将正确舍入到最接近的整数值,确保1.999999999999正确变为整数2; Trunc会导致1而不是.(感谢Heartware的提醒.)

var
  Minutes: Integer;
  T: TDateTime;
begin
  Minutes := Round(NumberBox1.Value);
  T := IncMinute(Now, Minutes);
end;
Run Code Online (Sandbox Code Playgroud)

Trunc和Round在System单元中.

  • 然而,我会使用 ROUND 来代替,因为 1.999999 的值可能更正确地被解释为 2 而不是 1。并且“非常接近整数值,但不完全存在”的值对于浮动确实很有可能点值 - 即使您已将控件设置为仅允许整数值。 (2认同)