代码之家  ›  专栏  ›  技术社区  ›  Emanuil Rusev

对浮点数据使用SUM

  •  20
  • Emanuil Rusev  · 技术社区  · 15 年前

    一张桌子:
    项目(ID、价格)

    有一行:
    ID:1,价格:565.8

    SELECT price FROM items 给予 565.8
    SELECT SUM(price) FROM items 给予 565.799987792969 而不是 五百六十五点八 我希望如此。

    在哪里 565.799987792969 来自何方?

    2 回复  |  直到 11 年前
        1
  •  20
  •   LittleBobbyTables - Au Revoir    15 年前

    我不知道你用的是什么版本,但听起来像 this link 描述您的体验。

    从链接:

    mysql> select * from aaa;
    +----+------------+------+
    | id | month_year | cost |
    +----+------------+------+
    |  1 | 2002-05-01 | 0.01 |
    |  2 | 2002-06-01 | 1.65 |
    |  3 | 2002-07-01 | 0.01 |
    |  4 | 2002-01-01 | 0.01 |
    +----+------------+------+
    
    mysql> select id, sum(cost) from aaa group by id;
    +----+---------------------+
    | id | sum(cost)           |
    +----+---------------------+
    |  1 | 0.00999999977648258 |
    |  2 |    1.64999997615814 |
    |  3 | 0.00999999977648258 |
    |  4 | 0.00999999977648258 |
    +----+---------------------+
    
    The SUM function changes 0.01 to 0.00999999977648258.
    

    浮点数存储为近似值;如果要存储价格,最好使用存储精确值的十进制数据类型。

        2
  •  9
  •   Eugene Yarmash    15 年前

    你可以使用 ROUND FORMAT 功能:

    SELECT ROUND(SUM(price), 2) FROM items;
    

    或者,可以在定义列时指定精度,例如 FLOAT(5,2) .