Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
rounding and floats
#1
Hi, I don't understand why 10/3 the answer is 3 and 10.0/3.0 is 3.3333? Can anyone explain this to me? Thanks!
Reply
#2
There's a python tutorial on the subject of floating point and rounding.

If you get 10/3 as 3, then that suggests you're using python 2, which has different semantics for floating point division and integer division. I suggest you start using python3 and learn the rules for that version instead.

In python2, the division result depends on the arguments (integer vs floating point). In python3, regular division can always be floating point if necessary. You use a different operator (//) to force integer results.

# python3
>>> 10/3
3.3333333333333335
>>> 10.0/3.0
3.3333333333333335
Reply
#3
I wouldn't understand why 10/3 == 3 either. I cannot find a way to make 10/3 == 3. But I cannot do that because I am running Python 3.8. If I was running Python 2.7 10/3 does == 3.

In Python pre 3, dividing an integer by an integer produced an integer. That is why 10 / 3 == 3. It cannot equal 3.33333 because 3.3333 is not an integer. 3 the integer part left over when you remove the fractional .333333 part, so the answer is 3.

To do the same trick in Python 3 you need to add extra code. int(10/3) == 3.

By the way, integer division in C or C++ works the same way.

Things change when you start using floats. A float divided by anything produces a float and dividing anything by a float produces a float. That is why 10.0 / 3.0 == 3.333333 and 10.0 / 3 == 3.3333 and 10 / 3.0 == 3.33333. In this Python 2 and Python 3 agree. When you do math operations, if any of the operands is a float the result is a float.

By the way, floating point division in C or C++ works the same way.

There is a misconception that "//" is integer division in Python 3. This is incorrect. "//" is "floor division". Floor division is similar to integer division, but the result is not necessarily an integer.
10 // 3 == 3, 3 is an integer
10.0 // 3.0 == 3.0, 3.0 is a float if dividend or divisor are floats.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  When is it safe to compare (==) two floats? Radical 4 651 Nov-12-2023, 11:53 AM
Last Post: PyDan
  need help rounding joseph202020 7 1,257 Feb-21-2023, 08:13 PM
Last Post: joseph202020
  from numpy array to csv - rounding SchroedingersLion 6 2,064 Nov-14-2022, 09:09 PM
Last Post: deanhystad
  floats 2 decimals rwahdan 3 1,588 Dec-19-2021, 10:30 PM
Last Post: snippsat
  Random data generation sum to 1 by rounding juniorcoder 9 3,350 Oct-20-2021, 03:36 PM
Last Post: deanhystad
  Rounding issue kmll 1 1,379 Oct-08-2021, 10:35 AM
Last Post: Yoriz
  Not rounding to desired decimal places? pprod 2 2,505 Mar-05-2021, 11:11 AM
Last Post: pprod
  Decimal Rounding error project_science 4 2,697 Jan-06-2021, 03:14 PM
Last Post: project_science
  Rounding to the nearest eight wallgraffiti 2 2,020 Jul-15-2020, 06:05 PM
Last Post: wallgraffiti
  int, floats, eval menator01 2 2,404 Jun-26-2020, 09:03 PM
Last Post: menator01

Forum Jump:

User Panel Messages

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