cze,
wiecie moze jak zapisac liczby z przecinkami co 3 miejsce od konca?
np. 10000 > 10,000
var
S: String;
begin
S := '10000';
Insert(',', S, 3);
Caption := S;
end;
Function Cena(dw: int64): String;
Var
i, j : integer;
s : String;
Begin
For i := 1 To length(inttostr(dw)) Do
Begin
s := s + inttostr(dw)[i];
End;
j := 0;
For i := length(s) Downto 1 Do
Begin
j := j + 1;
If j = 3 Then
Begin
insert(',', s, i);
j := 0;
End;
End;
s := '$' + s;
If s[2] = '-' Then
Begin
delete(s, 2, 1);
s := '-' + s;
End;
If s[2] = ',' Then
delete(s, 2, 1);
result := s;
End;
function Cena(s:string):string;
var i,j,c:integer;
s:string;
begin
c:=0;
j:=1;
for i:=length(s) downto 2 do
begin
if j mod 3 = 0 then
begin
Insert(',',s,Length(s)-j+1-c);
inc(c);
end;
inc(j);
end;
result:=s;
end;
A może po prostu:
var
s: string;
cena: real;
Begin
s := FormatFloat(',0',cena);
End;
Czyz nie prostsze :)
Nie, gdyż taka instrukcja wstawia spację zamiast przecinka i usuwa to co powinno byćpo przecinku (przynajmniej u mnie).
no i tutaj trzeba sie zastanowic nad wykorzystaniem zapisu tej liczby. Jezeli chcemy miec przcinki, to liczba nie moze byc wykorzystywana do dalszych obliczen, czyli mozemy ja zaokraglic do ktoregos miejsca po przecinku (kropce wg. standardow zagranicznych):
s := FormatFloat(',0.000',cena);
A co do tych spacji to nie wim, ale wydaje mi sie ze powinny byc przecinki, a jezeli nie to idzie wykorzystac funkcje:
s[pos(s,' ')] := ','; // pisze z pamieci ale powinno byc to cos takiego
no i zwykla petelke :)
A jezeli to nie dziala, to idzie jeszcze pokombinowac z funkcja:
for i:=1 to length(IntToStr(cena))/3 do
s := copy(IntToStr(cena),i*3,3);
Moim zdaniem jest wiele prostszych sposobow niz te u gory, ale jak wiadomo, ma zadzalac a potem bedziemy ulepszac :)
//najprosciej
DecimalSeparator:='#';
ThousandSeparator:='_';
x:=1234567.89;
self.caption:=Format('%0.2n',[x]);
//potem przywroc oryginalne wartosci separatorow
//albo uzyj FormatFloat z odpowiednio wpisanym FormatSettings