I have a spanish user who is getting an invalid floating point error
when doing this
var
S : String;
R : Real;
begin
S := '3.12345';
R := StrToFloat(S); //- Exception here.
The reason for this is that his location uses ,
for the decimal place!
How can I safely convert the string above to a float for the user without it bombing out.
Roll your own version of StrToFloat
function StrToFloat_UK(const AStr: string): Float;
var
FS: TFormatSettings;
begin
FS.Create('en-UK');
Result:= StrToFloat(AStr, FS):
end;
And use this in place of StrToFloat.
Use the second overload of StrToFloat
with a TFormatSettings
that has DecimalSeparator
set to .
.
You could use the procedure val
, it disregards local system settings.
var
S : String;
R : Real;
Test: Integer;
begin
S := '3.12345';
Val(S, R, Test);
end;
If you know that the strings use .
as the decimal separator, then you should do something like
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.UpdateFormatSettings := false;
DecimalSeparator := '.';
end;
The line
Application.UpdateFormatSettings := false;
is very important. The default value of this property is true
, and in such case, the DecimalSeparator
variable may be reverted to its default value (e.g. ,
) anytime, for instance when you switch user.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With