On 25-05-2022 10:08, artyom.abakumov wrote:
The CAST function returns a strange result in the following case:

SQL> SELECT CAST(345.12e-2 as VARCHAR(10)) from RDB$DATABASE;

CAST
==========
3.45

Is it a correct behavior?
LI-V4.0.2.2770 Firebird 4.0

It does seem off, I would expect it to output 3.4512, same as happens for cast(3.4512e0 as varchar(10)).

There are other oddities, e.g. cast(x as varchar(10)) where x is a literal gives weird results:


34512e-4    : 3.4512000
3451.2e-3   : 3.5
34.512e-1   : 3.451
3.4512e0    : 3.4512
0.34512e1   : 3.45120
0.034512e2  : 3.451200
0.0034512e3 : 3.4512000

These should basically be the same value

Also
select cast(x as varchar(10)) from (select cast(345.12e-2 as double precision) as x from rdb$database);

results in 3.3412000

while
select cast(x as varchar(10)) from (select 345.12e-2 as x from rdb$database);

results in 3.45, which is odd as 345.12e-2 is a double precision literal, but it looks like it gets coerced to something else in the presence of the cast to varchar.

Mark
--
Mark Rotteveel


Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to