Probably just double-precision math errors internally. I'd suspect FLOOR() will do a better job, but as my 3DS is busted I can't do any testing.
What exactly are you looking for in number-to-string conversion? No scientific notation ever? 15 digits max? Including negative sign? Including the decimal point? Always, or just when there's something nonzero to display on the other side?
There's no negative sign, and there's no decimal point, in the 'condensed digits'. Just sayin'.
I know :(
I'm using GPOINT for the decimal point, and the - sign is displayed at the left side of the screen.
At this point, FORMAT$() is all you need for flexible number-to-string conversion. You shouldn't even touch STR$(), like ever.