colin
colin

Reputation: 3103

Strtofloat / Floattostr conversion

I am having an issue with the StrToFloat routine. I am running Delphi 7 on Windows Vista with the regional format set to German (Austria)

If I run the following code -

DecimalSeparator:='.';
anum:=StrToFloat('50.1123');
edt2.Text:=FloatToStr(anum);

when I convert the string to a float anum becomes 50,1123 and when I convert it back to a sting it becomes '50.1123'

How do it so that when I convert the string to a float the number appears with a decimal point rather than a comma as the decimal separator.

thanks

Colin

Upvotes: 2

Views: 3505

Answers (1)

Andreas Rejbrand
Andreas Rejbrand

Reputation: 108963

You have to appreciate the difference between a floating-point number and a textual representation of it (that is, a string of characters).

A floating-point number, as it is normally stored in a computer (e.g. in a Delphi float variable), does not have a decimal separator. Only a textual representation of it does. If the IDE displays the anum as '50,1123' this simply means that the IDE uses your computer's local regional settings when it creates a textual representation of the number inside the IDE.

In your computer's memory, the value '50.1123' (or, if you prefer, '50,1123'), is only stored using ones and zeroes. In hexadecimal notation, the number is stored as 9F AB AD D8 5F 0E 49 40 and contains no information about how it should be displayed. It is not like you can grab a magnifying glass and direct it to a RAM module to find a tiny, tiny, string '50.1123' (or '50,1123').

Of course, when you want to display the number to the user, you use FloatToStr which takes the number and creates a string of characters out of it. The result can be either '50.1123' or '50,1123', or something else. (In memory, these strings are 35 30 2C 31 31 32 33 and 35 30 2E 31 31 32 33 (ASCII), respectively.)

Upvotes: 9

Related Questions