вот пример, но только для сложения положительных чисел:

var
idTxt : integer;
cmdExit : command;
a,b : string;
function sum(a,b : string) : string;
var
s : string;
ap,bp : integer;
sm,ost : integer;
begin
ap:=pos(a,'.');
bp:=pos(b,'.');
if (ap=-1) then begin a:=a+'.'; ap:=pos(a,'.'); end;
if (bp=-1) then begin b:=b+'.'; bp:=pos(b,'.'); end;
while (ap<bp) do begin a:='0'+a; ap:=ap+1; end;
while (bp<ap) do begin b:='0'+b; bp:=bp+1; end;
ap:=length(a);
bp:=length(b);
while (ap<bp) do begin a:=a+'0'; ap:=ap+1; end;
while (bp<ap) do begin b:=b+'0'; bp:=bp+1; end;
s:='';
ost:=0;
for ap:=bp-1 downto 0 do
begin
if getChar(a,ap)<>'.' then
begin
sm:=(ord(getChar(a,ap))-48) + (ord(getChar(b,ap))-48);
if ost>0 then begin sm:=sm+ost; ost:=0; end;
while sm>=10 do begin sm:=sm-10; ost:=ost+1; end;
s:=''+sm+s;
end
else s:='.'+s;
end;
if ost>0 then s:=''+ost+s;
sum:=s;
end;
begin
showForm;
a:='12999999';
b:='6789.2999';
idTxt := formAddString(a+'+'+b+'='+sum(a,b));
cmdExit := createCommand('Exit', CM_EXIT, 1);
addCommand(cmdExit);
repeat delay(1000); until getClickedCommand=cmdExit;
end.