mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-26 08:31:46 +01:00
* Better patch from Laco for bug #24274, without relying on try/except
git-svn-id: trunk@24323 -
This commit is contained in:
parent
742b9b5359
commit
3125b9e6b0
@ -1813,9 +1813,11 @@ IMPLEMENTATION
|
|||||||
function BCDToCurr ( const BCD : tBCD;
|
function BCDToCurr ( const BCD : tBCD;
|
||||||
var Curr : currency ) : Boolean;
|
var Curr : currency ) : Boolean;
|
||||||
|
|
||||||
|
const
|
||||||
|
MaxCurr: array[boolean] of QWord = (QWord($7FFFFFFFFFFFFFFF), QWord($8000000000000000));
|
||||||
var
|
var
|
||||||
bh : tBCD_helper;
|
bh : tBCD_helper;
|
||||||
res : int64;
|
res : QWord;
|
||||||
c : currency absolute res;
|
c : currency absolute res;
|
||||||
i : {$ifopt r+} low ( bh.FDig )..4 {$else} Integer {$endif};
|
i : {$ifopt r+} low ( bh.FDig )..4 {$else} Integer {$endif};
|
||||||
|
|
||||||
@ -1824,22 +1826,28 @@ IMPLEMENTATION
|
|||||||
}
|
}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
BCDToCurr := True;
|
BCDToCurr := False;
|
||||||
|
if BCDPrecision(BCD) - BCDScale(BCD) > 15 then
|
||||||
|
Exit;
|
||||||
unpack_BCD ( BCD, bh );
|
unpack_BCD ( BCD, bh );
|
||||||
res := 0;
|
res := 0;
|
||||||
WITH bh do
|
WITH bh do
|
||||||
try
|
begin
|
||||||
for i := FDig TO 4 do
|
for i := FDig TO 4 do
|
||||||
res := res * 10 - Singles[i];
|
res := res * 10 + Singles[i];
|
||||||
if Plac > 4
|
if Plac > 4
|
||||||
then
|
then
|
||||||
if Singles[5] > 4
|
if Singles[5] > 4
|
||||||
then Inc ( res );
|
then Inc ( res );
|
||||||
if not Neg then
|
if res > MaxCurr[Neg] then
|
||||||
res := -res;
|
Exit;
|
||||||
|
if Neg then
|
||||||
|
begin
|
||||||
|
res := not res;
|
||||||
|
inc(res);
|
||||||
|
end;
|
||||||
Curr := c;
|
Curr := c;
|
||||||
except
|
BCDToCurr := True;
|
||||||
BCDToCurr := False;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user