Fix parseFloat for trailing digits after _

parseFloat would consider `1.000_00` an invalid float literal because there are less than three digits behind the last underscore.

I mentioned this bug in #342, but in fact the fix was a bit more complicated than I said there. Also, for some reason there was actually a test for the incorrect behavior.