PySqlite - division of real numbers without decimal fractions

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Astley Le Jasper

    #1

    PySqlite - division of real numbers without decimal fractions

    I've been getting errors recently when using pysqlite. I've declared
    the table columns as real numbers to 2 decimal places (I'm dealing
    with money), but when doing division on two numbers that happen to
    have no decimal fractions, the results through pysqlite are coming
    through as integers. The funny thing is that when looking at the
    database using SQLite Manager or SQLite Pro the results there are
    displayed correctly. As a temporary fix I've had to multiply one of
    the numbers with 1.0 which has fixed it but I wonder if there is
    something else I'm doing wrong.
  • Dan Bishop

    #2
    Re: PySqlite - division of real numbers without decimal fractions

    On Nov 6, 3:46 pm, Astley Le Jasper <Astley.lejas.. .@gmail.comwrot e:
    I've been getting errors recently when using pysqlite. I've declared
    the table columns as real numbers to 2 decimal places (I'm dealing
    with money), but when doing division on two numbers that happen to
    have no decimal fractions, the results through pysqlite are coming
    through as integers. The funny thing is that when looking at the
    database using SQLite Manager or SQLite Pro the results there are
    displayed correctly. As a temporary fix I've had to multiply one of
    the numbers with 1.0 which has fixed it but I wonder if there is
    something else I'm doing wrong.
    You're using old-style division. Put the line "from __future__ import
    division" in your script.

    Comment

    • Astley Le Jasper

      #3
      Re: PySqlite - division of real numbers without decimal fractions

      On Nov 7, 6:36 am, Dan Bishop <danb...@yahoo. comwrote:
      On Nov 6, 3:46 pm, Astley Le Jasper <Astley.lejas.. .@gmail.comwrot e:
      >
      I've been getting errors recently when using pysqlite. I've declared
      the table columns as real numbers to 2 decimal places (I'm dealing
      with money), but when doing division on two numbers that happen to
      have no decimal fractions, the results through pysqlite are coming
      through as integers. The funny thing is that when looking at the
      database using SQLite Manager or SQLite Pro the results there are
      displayed correctly. As a temporary fix I've had to multiply one of
      the numbers with 1.0 which has fixed it but I wonder if there is
      something else I'm doing wrong.
      >
      You're using old-style division.  Put the line "from __future__ import
      division" in your script.
      Hi,

      But the calculations are being done within a sql statement within
      SQLite?

      ([actual_price]-[recommended_pri ce])/[recommended_pri ce]

      Comment

      • =?ISO-8859-1?Q?Gerhard_H=E4ring?=

        #4
        Re: PySqlite - division of real numbers without decimal fractions

        Astley Le Jasper wrote:
        I've been getting errors recently when using pysqlite. I've declared
        the table columns as real numbers to 2 decimal places (I'm dealing
        with money),
        MySQL doesn't have any MONEY type. All it has is INTEGER, REAL, TEXT,
        BLOB and NULL types.
        but when doing division on two numbers that happen to
        have no decimal fractions, the results through pysqlite are coming
        through as integers. The funny thing is that when looking at the
        database using SQLite Manager or SQLite Pro the results there are
        displayed correctly. As a temporary fix I've had to multiply one of
        the numbers with 1.0 which has fixed it but I wonder if there is
        something else I'm doing wrong.
        Perhaps using SQLite's column affinity would help? Let the type be named
        "real" instead of anything fancy:
        >>from pysqlite2 import dbapi2 as sqlite3
        >>con = sqlite3.connect (":memory:")
        >>con.execute(" create table foo(x number(10,2))")
        <pysqlite2.dbap i2.Cursor object at 0xb7d6faa0>
        >>con.executema ny("insert into foo(x) values (?)", [(3,), (3.0,)])
        <pysqlite2.dbap i2.Cursor object at 0xb7d830e0>
        >>print con.execute("se lect x from foo").fetchall( )
        [(3,), (3,)] # <------------------------ !!!
        >>con.execute(" create table bar(x real)")
        <pysqlite2.dbap i2.Cursor object at 0xb7d83110>
        >>con.executema ny("insert into bar(x) values (?)", [(3,), (3.0,)])
        <pysqlite2.dbap i2.Cursor object at 0xb7d83170>
        >>print con.execute("se lect x from bar").fetchall( )
        [(3.0,), (3.0,)] # <------------------------ !!!

        Do you see the difference?

        -- Gerhard

        Comment

        • Astley Le Jasper

          #5
          Re: PySqlite - division of real numbers without decimal fractions

          On 8 Nov, 05:39, Dennis Lee Bieber <wlfr...@ix.net com.comwrote:
          On Fri, 07 Nov 2008 14:36:52 +0100, Gerhard Häring <g...@ghaering. de>
          declaimed the following in comp.lang.pytho n:
          >
          Astley Le Jasper wrote:
          I've been getting errors recently when using pysqlite. I've declared
          the table columns as real numbers to 2 decimal places (I'm dealing
          with money),
          >
          MySQL doesn't have any MONEY type. All it has is INTEGER, REAL, TEXT,
          BLOB and NULL types.
          >
                  Did you mean SQLite? <G>
          >
          >
          >
          Perhaps using SQLite's column affinity would help? Let the type be named
          "real" instead of anything fancy:
          >
                  If dealing with monetary computations, it might be betterto define
          converters/adapters for Python's decimal type... Though that may mean
          that doing simple SQL arithmetic may not be possible -- might need to
          supply a Python function to work the arithmetic with conversion of the
          data...
          --
                  Wulfraed        Dennis Lee Bieber              KD6MOG
                  wlfr...@ix.netc om.com             wulfr...@bestia ria.com
                          HTTP://wlfraed.home.netcom.com/
                  (Bestiaria Support Staff:               web-a...@bestiaria. com)
                          HTTP://www.bestiaria.com/
          Hi,

          Sorry. I don't get this.

          I am using numbers to 2dp (it doesn't really matter that it's money or
          not) and importing them into SQLite where all the views are held. One
          of the columns is doing the following calculations:


          ([actual_price]-[recommended_pri ce]) AS [difference]
          ([actual_price]-[recommended_pri ce])/[recommended_pri ce] AS
          [difference_prop ortion]

          When using a SQLite gui like SQLiteManager I can see the imported data
          is stored correctly and the column has been calculated correctly. So
          I'll have something like:

          [actual_price],[recommended_pri ce],[difference],
          [difference_prop ortion]
          199.99,299.99,-100.00,-0.343344445
          100.00,120.00,-100.00,-0.16666667

          However, when calling the view from pysqlite I get the following
          results
          199.99,299.99,-100.00,-0.34
          100.00,120.00,-100.00,0

          So the row where both numbers have no decimal fraction are changing to
          an integer. I looks like there is something going on in between sqlite
          and pysqlite.

          Comment

          Working...