8

I need to make a program that works out the amount you will get paid for the hours you worked. Here's the code:

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.

The error msg is:

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

Please do note: I am a novice user at coding all together and this is IT homework. Any help would be much appreciated! Thanks in advance!

1
  • 4
    At your last question I said: When you present an error message, make sure that we can marry up the line number in the message with the code that you present. Please do heed that advice. Commented Feb 5, 2014 at 21:33

1 Answer 1

17

The error is here:

iHours := sedHours.value * rPay;

The right hand side is a floating point expression because rPay is a floating point variable. You cannot assign a floating point value to an integer. You need to convert to an integer.

For instance, you might round to the nearest:

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

Or you might use Floor to get the largest integer less than or equal to the floating point value:

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

Or perhaps Ceil, the smallest integer greater than or equal to the floating point value:

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

For some more general advice I suggest that you try to look in the documentation when you encounter an error that you do not understand. Every compiler error is documented. Here's the documentation for E2010 Incompatible types: http://docwiki.embarcadero.com/RADStudio/en/E2010_Incompatible_types_-_%27%25s%27_and_%27%25s%27_%28Delphi%29

Take a good read of it. Although the example given is not an exact match for your case it is very close. Compiler errors are not things to be scared of. They come with descriptive text and you can solve your problem by reading them and trying to work out how your code has led to the particular error.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.