Delphi TNumberbox возвращает сингл;как добраться до стандартного целого числа? - PullRequest
2 голосов
/ 26 марта 2012

TNumberbox и TSpinEdit возвращают значения, определенные как тип single . Я хочу использовать эти значения для выполнения простой целочисленной арифметики, но я не могу успешно привести их к более обобщенному целочисленному типу, и Delphi выдает мне ошибки времени компиляции, если я пытаюсь использовать их как целые числа. Этот код, например, не работает с

"E2010 Несовместимые типы: 'Int64' и 'Extended'":

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

Все, что я хочу сделать, - это дать пользователю несколько минут, а затем соответственно увеличить значение даты и времени. Ничто из того, что я пробовал, не позволяет мне использовать этот сингл таким образом.

Что мне не хватает ??

1 Ответ

5 голосов
/ 26 марта 2012

Просто обрежьте значение перед использованием:

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

В зависимости от ваших конкретных потребностей, вам может понадобиться использовать Round. Он будет правильно округлен до ближайшего целого значения, убедившись, что 1.999999999999 правильно становится целым числом 2; Trunc приведет к 1 вместо. (Спасибо Heartware за это напоминание.)

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

Усечение и Раунд находятся в единице System.

...