In regards to limiting input, that is an issue with the INPUT statement, because you can't manipulate it. So back we go to using the LINE INPUT, where the number is input as a string, and therefore is not manipulated by base 2 rounding. Without any declaring of the variable type, INPUT assigns the variable as SINGLE. BTW - I find it interesting that PRINT without a variable type declaration does not follow this same convention. Instead, PRINT assigns the variable as DOUBLE, go figure. I would think INPUT and PRINT should be on the same page here, but they clearly are not. You would need to define all INPUT variables as DOUBLE to be equivalent to PRINT. Meaning INPUT a# would allow .499999999999999 to remain that number after INPUT, as well as PRINT .499999999999999 would display the same. Add one more "9" to the end of either, and they both reach the max of their DOUBLE precision limits, and would both be rounded to .5.
So where should we go with this. Well, since you guys seem to appreciate graphics more than I, my recommendation would be to modify the INPUT statement so when the user is about to type that last digit, the Lost in Space robot appears in the IDE, waves its arms frantically, and shouts, "Danger! Danger!"
Pete