Working with decimal points

Discussion in 'Python' started by Byte, Apr 8, 2006.

  1. Byte

    Byte Guest

    How come:

    sum = 1/4
    print sum

    returns 0? 1/4=0.25, not 0. How do I fix this?

    -- /usr/bin/byte
     
    Byte, Apr 8, 2006
    #1
    1. Advertising

  2. Byte

    Guest

    Byte wrote:
    > How come:
    >
    > sum = 1/4
    > print sum
    >
    > returns 0? 1/4=0.25, not 0. How do I fix this?


    Make sure there is at least one float in your equation. In your example
    Python is doing interger math for you and returing the floor. You need
    to give it a hint that you would like to do floating point math.

    >>> sum = 1.0/4
    >>> print sum

    0.25
    >>> sum = 1/4.0
    >>> print sum

    0.25
    >>>
     
    , Apr 8, 2006
    #2
    1. Advertising

  3. Byte

    Byte Guest

    That dosnt work either:

    sum = 0.1+1/4
    print sum

    Just returns 0.1
     
    Byte, Apr 8, 2006
    #3
  4. "Byte" wrote:

    > How come:
    >
    > sum = 1/4
    > print sum
    >
    > returns 0?


    because 1 and 4 are integer objects, so 1/4 is an integer division, which
    rounds down to the nearest integer.

    > 1/4=0.25, not 0. How do I fix this?


    use floating point numbers:

    1.0/4.0 = 0.25

    or convert one of the numbers to a float:

    float(1)/4 = 0.25

    </F>
     
    Fredrik Lundh, Apr 8, 2006
    #4
  5. Byte

    Byte Guest

    Fredrik Lundh's way works: thank a million!
     
    Byte, Apr 8, 2006
    #5
  6. Byte

    Peter Hansen Guest

    Byte wrote:
    > That dosnt work either:
    >
    > sum = 0.1+1/4
    > print sum
    >
    > Just returns 0.1


    That's because the 1/4 is executed first, and the problem mentioned
    still applies (i.e. you get a 0, then add it to 0.1).

    The best fix for you might be simply to place this line at the start
    (before all other code) of your module:

    from __future__ import division

    That will change the way simple division works to give you the results
    you expected. See the online docs for more background on this.

    -Peter
     
    Peter Hansen, Apr 8, 2006
    #6
  7. On Sat, 08 Apr 2006 08:21:06 -0700, Byte wrote:

    > How come:
    >
    > sum = 1/4
    > print sum
    >
    > returns 0? 1/4=0.25, not 0. How do I fix this?


    By default, / does integer division, not floating point. In integer
    division, 1/4 is 0, exactly as calculated.

    (How many fours go into one? Zero fours go into one, with one remainder.)

    There are two ways to change this:

    (1) Convert at least one of the numbers to a float first:

    >>> 1.0/4

    0.25
    >>> 1/float(4)

    0.25

    but be careful, this one doesn't do what you want:

    >>> float(1/4)

    0.0


    (2) Run the following command at the start of your program or in your
    interactive session:

    >>> from __future__ import division


    Now division will behave as you expect:

    >>> 1/4

    0.25

    and you can use // for integer division.

    Now that you can do floating point division, I peer into my crystal
    ball and predict your next question: why is Python so inaccurate?

    >>> 1/10

    0.10000000000000001

    Answer: it isn't. You've discovered a mathematical limitation that 1/10
    cannot be written exactly in any fixed number of binary places, just like
    1/3 cannot be written exactly in any fixed number of decimal places.

    See also:

    http://www.python.org/doc/faq/general.html#why-are-floating-point-calculations-so-inaccurate

    http://docs.python.org/tut/node16.html


    Hope this helps.


    --
    Steven.
     
    Steven D'Aprano, Apr 8, 2006
    #7
  8. Byte

    Guest

    Byte wrote:
    > That dosnt work either:
    >
    > sum = 0.1+1/4
    > print sum
    >
    > Just returns 0.1


    You get precedence right? Your equation does not evaluate from left to
    right. 1/4 happens first, and since there are no floats you get 0.

    in that equation you basically are doing this:

    sum = 1/4
    print sum
    0

    sum = 0.1 + sum
    print sum
    0.1
     
    , Apr 8, 2006
    #8
  9. "Byte" wrote:

    > That dosnt work either:
    >
    > sum = 0.1+1/4
    > print sum
    >
    > Just returns 0.1


    division has higher precedence than addition, so 1/4 is calculated first,
    and the result is then added to 0.1.

    and as I've already explained, 1/4 is an integer division, so the result
    is rounded down to the the nearest integer (0). in other words, your
    expression boils down to

    0.1 + 0

    which is 0.1 [1].

    the precedence order is explained here:

    http://docs.python.org/ref/summary.html

    </F>

    1) or at least a close approximation of it; see
    http://docs.python.org/tut/node16.html
     
    Fredrik Lundh, Apr 8, 2006
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sam
    Replies:
    1
    Views:
    8,914
    Prnda76
    Feb 11, 2010
  2. Replies:
    1
    Views:
    2,538
  3. Guy Hocking

    Displaying data to 2 decimal points

    Guy Hocking, Mar 7, 2004, in forum: ASP General
    Replies:
    8
    Views:
    234
    Bob Barrows
    Mar 7, 2004
  4. Pp

    Precision upto n decimal points

    Pp, Dec 4, 2011, in forum: C Programming
    Replies:
    10
    Views:
    754
    gwowen
    Dec 5, 2011
  5. Replies:
    8
    Views:
    171
Loading...

Share This Page