I tried the same examples, and in these last two cases I get 3.3 which
is to be expected since the conversion stops as soon as an input
character is found which would make the input invalid for a Float,
i.e., str2float('3.3e+00.4') interprets '3.3e+00' and converts it to
3.3 ; and str2float('3.3e+0O4') interprets '3.3e+0' and converts it to
3.3 — in both of these cases, trailing garbage is silently
disregarded.
In the first ("valid") case I get 33000.0 which is the number
expressed as a Float, not an (integer) Number.
If you can devise a regular expression covering what your input can
legitimately be, you could wrap the whole sequence of methods in an =~
or similar conditional (see :help expr-=~).
Best regards,
Tony.