Delphi: несовместимые типы: 'integer' и 'extended'

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

unit HoursWorked_u;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Spin;

type
  TForm1 = class(TForm)
    lblName: TLabel;
    edtName: TEdit;
    Label1: TLabel;
    sedHours: TSpinEdit;
    btncalc: TButton;
    Panel1: TPanel;
    lblOutput: TLabel;
    Label2: TLabel;
    Panel2: TPanel;
    lblOutPutMonth: TLabel;
    labelrandom: TLabel;
    Label3: TLabel;
    seddays: TSpinEdit;
    procedure btncalcClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
// sedHours and sedDays are SpinEdits
// Rand (R) is South African currency eg: One months work, I will recieve-
// -R10 000.00
// Where R12,50 is paid an hour.
// Need to work out how much I will get paid for how  many hours are worked.
procedure TForm1.btncalcClick(Sender: TObject);
var
    sName                       :string;
    iHours, iDays               :integer;
    rPay                        :real;

begin
  rPay := 12.5;
  sName := edtName.Text;
  iHours := sedHours.value * rPay;
  iDays := sedDays.value * iHours;
    lblOutput.caption := sName + ' You will recieve R' + IntToStr (iHours);
    lblOutputMonth.Caption := 'You will recive R' + intToStr (iDays);
end;

end.

ошибка msg:

[Error] HoursWorked_u.pas(51): Incompatible types: 'Integer' and 'Extended'

пожалуйста, обратите внимание: я начинающий пользователь в кодировании все вместе, и это домашнее задание. Любая помощь будет высоко ценится! Заранее спасибо!

1 ответов


ошибка здесь:

iHours := sedHours.value * rPay;

правая сторона является выражением с плавающей запятой, потому что rPay является переменной с плавающей запятой. Целому числу нельзя присвоить значение с плавающей запятой. Вам нужно преобразовать в целое число.

например, вы можете округлить до ближайшего:

iHours := Round(sedHours.value * rPay);

или вы можете использовать Floor чтобы получить наибольшее целое число меньше или равно значению с плавающей запятой:

iHours := Floor(sedHours.value * rPay);

или, возможно,Ceil, самый маленький целое число, большее или равное значению с плавающей запятой:

iHours := Ceil(sedHours.value * rPay);

для некоторых более общих советов я предлагаю вам попробовать поискать в документации, когда вы столкнулись с ошибкой, что вы не понимаете. Каждая ошибка компилятора документируется. Вот документация для несовместимых типов E2010: http://docwiki.embarcadero.com/RADStudio/en/E2010_Incompatible_types_-_%27%25s%27_and_%27%25s%27_%28Delphi%29

прочтите хорошенько. Хотя приведенный пример не совсем соответствует вашему случаю, он очень близок. Ошибок компилятора не стоит бояться. Они поставляются с описательным текстом, и вы можете решить свою проблему, прочитав их и пытаясь понять, как ваш код привел к конкретной ошибке.