[fpc-pascal] Currency and ABS(-674.59)

Sven Barth pascaldragon at googlemail.com
Tue Mar 6 14:30:42 CET 2012

Am 06.03.2012 14:13, schrieb Ludo Brands:
>>>> Note that this requires compiler patching, because abs()
>> is internal
>>>> (it can be used in constant expressions). I would
>> personally argue to
>>>> do away entirely with the "treat currency as a floating
>> point type on
>>>> i386 so it can use the 80x87", and instead map it
>> implementation-wise
>>>> to int64 like on all other platforms. You may lose a bit of
>>>> performance, but you'll gain consistency. And you won't need hacks
>>>> like this (which, as mentioned before, only solves one particular
>>>> use-case, and so I'm not very much in favour of doing this).
>>> As far as I know, Currency is always a scaled int64, and didn't
>>> interpret the request as a request to change that. I missed
>> probably
>>> part of the argumentation but on the face of it, having a
>>> ABS(Currency) seems like a reasonable request.
>> No, Currency is based on Extended on i386 and x86_64 (except win64!).
>> Regards,
>> Sven
> There is also a lot of code in the rtl and fcl-db that supposes currency =
> double. Fe.
> Function CurrToStr(Value: Currency; Const FormatSettings: TFormatSettings):
> string;
> begin
>    Result:=FloatToStrF(Value,ffGeneral,-1,0,FormatSettings);
> end;
> Or
> TCurrencyField = class(TFloatField)

This should not be a problem as such code already works on non-i386 
platforms where currency is a Int64 ;)


More information about the fpc-pascal mailing list