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 ;)

Regards,
Sven

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to