You want to round your answer.
round(value,significantDigit) is the usual solution for this, however, this sometimes does not work, as one might expect from a mathematical point of view, when the digit is immediately inferior (to the left of) to the digit, re rounding to has a value of 5 .
Here are some examples of this unpredictable behavior:
>>> round(1.0005,3) 1.0 >>> round(2.0005,3) 2.001 >>> round(3.0005,3) 3.001 >>> round(4.0005,3) 4.0 >>> round(1.005,2) 1.0 >>> round(5.005,2) 5.0 >>> round(6.005,2) 6.0 >>> round(7.005,2) 7.0 >>> round(3.005,2) 3.0 >>> round(8.005,2) 8.01
Assuming you intend to do the traditional rounding of statistics in the sciences, this is a convenient wrapper to get the round function, which works as expected, in import additional things like Decimal .
>>> round(0.075,2) 0.07 >>> round(0.075+10**(-2*6),2) 0.08
Yeah! Therefore, based on this, we can make a function ...
def roundTraditional(val,digits): return round(val+10**(-len(str(val))-1))
This basically adds a very small value to the string to force it to be rounded up in unpredictable instances where there is usually no round function when you expect it. The convenient value to add is 1e-X , where X is the length of the line you are trying to use round in plus 1 .
The use approach of 10**(-len(val)-1) was intentional, as this is the largest small number you can add to force a shift, while also ensuring that the value you add never changes the rounding, even if there is no decimal . . I could only use 10**(-len(val)) with condiditional if (val>1) to subtract 1 more ... but it's easier to just subtract 1 , as that will not change much of the applicable decimal range, which is a workaround The solution can handle correctly. This approach will not succeed, if your values ββreach the limits of the type, it will not succeed, but for an almost complete range of valid decimal values ββit should work.
Thus, the finished code will look something like this:
def main(): printC(formeln(typeHere())) def roundTraditional(val,digits): return round(val+10**(-len(str(val))-1)) def typeHere(): global Fahrenheit try: Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n")) except ValueError: print "\nYour insertion was not a digit!" print "We've put your Fahrenheit value to 50!" Fahrenheit = 50 return Fahrenheit def formeln(c): Celsius = (Fahrenheit - 32.00) * 5.00/9.00 return Celsius def printC(answer): answer = str(roundTraditional(answer,2)) print "\nYour Celsius value is " + answer + " C.\n" main()
... should give you the expected results.
You can also use the decimal library, but the shell that I suggest is simpler and may be preferred in some cases.
Edit: Thanks to Blckknght for the fact that case 5 only occurs for certain values.