Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TryStrToFloat converts incorrect string

I'm using TryStrToFloat to convert string to Double variables. Everything works fine until string doesn't looks like '21e'. I get result of conversion 21.

It seems to me that compiler treats '21e' like number 21e0. String 21e1 gives result 210. When I use Val function conversion works better. String '21e' gives error, but now '21e1' gives 210, '21e-1' gives number 2,1 etc.

How to make correct working of conversion. Should I detect letter 'e' in text, or is any simply way to convert ?

like image 676
toja100 Avatar asked Dec 06 '14 22:12

toja100


1 Answers

The documentation says:

Use TryStrToFloat to convert a string, S, to a floating-point value. S must consist of an optional sign (+ or -), a string of digits with an optional decimal point, and an optional mantissa. The mantissa consists of 'E' or 'e' followed by an optional sign (+ or -) and a whole number. Leading and trailing blanks are ignored.

Your input does not satisfy the conditions and so should be treated as an error.

You did not say so explicitly, but I presume that you claim that:

TryStrToFloat('21e', val)

returns True. If so, this is a bug and should be reported to Embarcadero. If you need to work around this then I suggest you code your own function that detects this case and handles it correctly.

On the other hand, if that function call returns False the function is behaving as designed and your mistake is to read the value in val.

Update

I can confirm that TryStrToFloat('21e', val) returns True. I tested on XE7 update 1. I submitted the following bug report to Embarcadero: https://quality.embarcadero.com/browse/RSP-9814

like image 176
David Heffernan Avatar answered Nov 18 '22 11:11

David Heffernan