Python Forum
converting user input to float troubles
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
converting user input to float troubles
#1
The comments in my script says it all, but to summarize, sometimes when this code adds say "5.24 or 3.46" or any other non integer number to the calculation it causes the result to be something like ex. 56.789999999996 when it "should" be only 2 decimals like 5.00.
#this script is an attempt to create a simple shopping calculator
#I am brand new to programming and am well aware there may be
#much better ways to do this.
#I am open to suggestions to different methods of reaching this goal
#but also an explanation to why this is happening and possibly how to
#fix it in this context would be much appreciated.

#gets user input and adds it to total.
while True:
        
        #gets user input 
        user_input=input("")
        
        #stops an error where no input causes the next if statement to try to add a string to an integer
        if not user_input:
            user_input=0


               #converts user input from a string to a float and adds it to the total.
               #for some reason unknown to me,  this function sometimes causes the total to become
               #something like ex. 54.999999999996 after adding some non int inputs like ex. 5.23?
               #it probably has something to do with how python converts a string to a float? maybe?
        if user_input:
            total=total + float(user_input)
            print(total,"+")
Reply
#2
Calculations with floating point values aren't exact. See, for example this.
Reply
#3
You can use the round() function to round floats to two decimal points, but you still may face some issues due to the quirks of floating point math.

You might want to consider using the decimal module for greater precision when working with currency.
Reply
#4
As mentioned by ndc85430 a fixed number of binary bits cannot represent every number, even numbers with no fractional values. For your purposes you don't have to concern yourself with the tiny difference between the binary and decimal value unless your shopping calculation is going to handle millions of purchases. To get a pretty number with two decimal places use formatting in your print statement.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  troubles with tqdm max22 2 487 Nov-27-2023, 09:20 PM
Last Post: max22
  WHILE LOOP NOT RETURNING USER INPUT AFTER ZerroDivisionError! HELP! ayodele_martins1 7 991 Oct-01-2023, 07:36 PM
Last Post: ayodele_martins1
  restrict user input to numerical values MCL169 2 870 Apr-08-2023, 05:40 PM
Last Post: MCL169
  user input values into list of lists tauros73 3 1,025 Dec-29-2022, 05:54 PM
Last Post: deanhystad
Information How to take url in telegram bot user input and put it as an argument in a function? askfriends 0 1,033 Dec-25-2022, 03:00 PM
Last Post: askfriends
Question Take user input and split files using 7z in python askfriends 2 1,033 Dec-11-2022, 07:39 PM
Last Post: snippsat
Sad how to validate user input from database johnconar 3 1,837 Sep-11-2022, 12:36 PM
Last Post: ndc85430
  How to split the input taken from user into a single character? mHosseinDS86 3 1,138 Aug-17-2022, 12:43 PM
Last Post: Pedroski55
  Use pexpect to send user input alisha17 0 1,829 May-10-2022, 02:44 AM
Last Post: alisha17
  WHILE Loop - constant variables NOT working with user input boundaries C0D3R 4 1,434 Apr-05-2022, 06:18 AM
Last Post: C0D3R

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020