当前位置: 首页 > 面试题库 >

在FLOAT数据上使用SUM

方轩昂
2023-03-14
问题内容

一张桌子:
物品(编号,价格)

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

SELECT price FROM items给予而不是我期望的565.8
SELECT SUM(price) FROM items给予。565.799987792969``565.8

哪里565.799987792969来的?


问题答案:

我不确定您使用的是哪个版本,但是听起来像此链接描述了您正在体验的版本。

从链接:

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.

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



 类似资料:
  • 问题内容: 我有一个在Java堆栈(Struts 2 + Spring + Hibernate)上运行的Web应用程序,并在MySQL中保持不变。我查看了NoSQL数据库,它们肯定比RDBMS更容易推理和使用。这是一个音乐流应用程序,用于存储艺术家信息并允许用户保存播放列表。 我想知道切换到NoSQL DB(CouchDB,MongoDB,Cassandra)是否有任何优势(性能,硬件成本,简化代

  • 我们有一个现有的数据库在生产。我们已经决定使用liquibase进行所有进一步的更新,并创建任何新的数据库(如开发或集成)。 如果我们在生产上执行liquibase,它将尝试进行所有的完全更改,即使是那些已经存在的更改,这不会发生,因为除了两个新的更新之外,生产中已经有了所有的更改。现在我们想使用liquibase将这两个更改单独更新到产品中。 我们怎么能做到这一点?

  • 问题内容: 到底发生了什么 为什么我不能分配时间作为变量? 以及如何使用变量? 给定错误>>> 二进制运算符’+’不能应用于’DispatchTime’和’Float’类型的操作数 问题答案: 是一双。您不能将float和double值加在一起。 更换 与 它将正常工作。

  • 我知道如何在普通Kotlin类上使用apply函数,但无法将其用于数据类: 我得到一个编译消息: 没有为参数“name”传递值

  • 我有这个错误: 提前道谢。最诚挚的问候

  • 我对使用数据注释到DTO类感到困惑。这是我的示例类。 我在网上读到,特别是在DTO类上使用数据注释将允许通过使用生成的设置器来更改字段的值。 我应该删除lombok Data注释吗?并手动实现getter和setter。 谢谢:)