当前位置: 首页 > 知识库问答 >
问题:

在mysql中四舍五入并不像预期的那样工作

汪欣德
2023-03-14

我不明白为什么我的结果不同:

我有表订单和列价格(在mysql中键入double)。

数据库中的价格值为13.5。

查询:

SELECT ROUND(price * 0.09, 2) FROM orders where id = 1;

结果是:1.21

查询:

SELECT ROUND(13.5 * 0.09, 2);

结果是1.22

不舍入:选择13.5*0.09结果为1.215

因此,一轮后的正确结果是1.22。

为什么查询从id=1的订单中选择舍入(价格*0.09,2) 给我错误的结果(1.21)?

我不明白怎么了,我猜是铸造的问题。

有人能给我解释一下吗?


共有3个答案

籍靖
2023-03-14

最后,我将我的列转换为小数15,2。我有点担心转换的风险,经过几次测试,价格总和没有差异。我建议为每个有这个问题的人做这件事。

在MySQL中存储货币值的最佳数据类型

穆彬郁
2023-03-14

如果数据类型是浮点类型,请使用强制转换SELECT轮(强制转换(数量为十进制(10,2))*0.99,2)从订单WHERE 1

鞠建安
2023-03-14

我不能评论,所以我给你写了一个答案。

请阅读以下内容:http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html

浮动和双重数据,不存储确切的数字,所以有可能找到奇怪的问题。

试着像AT-2016告诉你的那样去CEIL,希望你能找到一个解决方案。

 类似资料:
  • 我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster

  • 本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。 ROUND()函数的行为取决于其参量是准确的还是近似的: ·对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负

  • 最后是持久性上下文配置: 我很感谢你的帮助。

  • 我有两个Avro模式V1和V2,在spark中读取如下: V1有两个字段“一”和“二” V2 与新字段:“三” 场景:编写器使用 V1 进行写入,读取器使用 V2 对 avro 记录进行解码。我的期望是看到字段3填充了默认值,即null。但是我在spark工作中遇到了以下异常。 我是不是错过了什么?我的理解是avro支持向后兼容。

  • 问题内容: 我怎么总是将a舍入为一个,而不舍入它。我知道,但是我希望它总是四舍五入。因此,如果为,则四舍五入为4。 问题答案: 您可以使用方法。 请参阅JavaDoc链接:https ://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil(double ) 从文档: 细胞 返回大于或等于自变量且等于数学整数的最小(最接近负无穷大

  • 我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >