[fpc-devel] MinCurrency

LacaK lacak at zoznam.sk
Wed Nov 18 14:25:03 CET 2015


> Hi,
> When I run this on Win32 (FPC 2.6.4):
> ==============================================
> var
>     c: currency;
>     e: integer;
> begin
>   c:=0;
>   Val('-922337203685477.5808',c,e);
>   Writeln('c=',c,' , e=',e);
>   Writeln(StrToCurr('-922337203685477,5808'));
> end.
> ==============================================
>
>  I get "correct" results:
> -------------------------------------------------------------------------
> c=-9.223372036854775808E+14 , e=0
> -9.223372036854775808E+14
> -------------------------------------------------------------------------
>
> But when I recompile for Win64 I get:
> -------------------------------------------------------------------------
> c= 0.000000000000000000E+00 , e=22
> An unhandled exception occurred at $000000000042B180 :
> EConvertError : "-922337203685477,5808" is an invalid float
> -------------------------------------------------------------------------
>
> As per documentation: http://www.freepascal.org/docs-html/ref/refsu6.html
> -922337203685477.5808 is in range of Currency data type
> But in sysstrh.inc is conditional definition of MinCurrency, but none 
> is -922337203685477.5808
>
> What is right behavior ?
> Thanks
> -Laco.
>

There is also related bug report: 
http://bugs.freepascal.org/view.php?id=28737

And look at part of code in rtl/objpas/sysutils/sysstrh.inc:

41     {$if defined(FPC_HAS_TYPE_EXTENDED) or 
defined(FPC_HAS_TYPE_FLOAT128)}
42       MinCurrency: Currency = -922337203685477.5807;
43       MaxCurrency: Currency =  922337203685477.5807;
44     {$else}
45       MinCurrency: Currency = -922337203685477.0000;
46       MaxCurrency: Currency =  922337203685477.0000;
47     {$endif}

Why is for case not defined(FPC_HAS_TYPE_EXTENDED), MinCurrency defined 
as is ?

-Laco.



More information about the fpc-devel mailing list