【发布时间】:2021-01-31 00:00:16
【问题描述】:
假设我有两列,A 和 B,它们的类型为 DECIMAL(9,2)。
现在,假设我运行以下查询:
SELECT SUM(A) / SUM(B)
我的理解是,这种除法不会通过浮点运算来完成,因为两列都是DECIMAL 类型。这是正确的吗?
另外,假设我运行以下查询:
SELECT SUM(A) / SUM(B) * 100
100 将如何影响查询?这会以某种方式导致 MySQL 进行浮点运算吗?如果是这样,我该如何避免?
【问题讨论】:
-
请提供结果不同的情况。有避免浮动的理由吗? MySQL 非常擅长总是得到“正确”的答案。
-
@RickJames 我正在进行涉及货币金额的计算。在 Java 中,我会使用 BigDecimals,在 PHP、bcmath 或像砖/数学这样的库中。我不确定什么是 MySQL 中的等价物。根据我的阅读和测试,我列出的查询提供了“正确”的答案,但我想与比我更了解 MySQL 的人再次确认。
-
我一直在思考这个问题,但唉,我没有明确的答案。对于像美元和美分这样简单加法的简单事物,所有的总和都应该是准确的。但是当你需要除法或银行批准的四舍五入时,我会怀疑。
-
如果你来了,就跨过那座桥。
-
我的理解是这种除法不会通过浮点运算完成,因为两列都是 DECIMAL 类型。这是正确的吗? (1) dbfiddle.uk/… (2) dev.mysql.com/doc/refman/8.0/en/precision-math-expressions.html (3) 从实践来看:没有显式 CAST 表达式的结果将四舍五入到最精确的操作数小数位数但不少于 6 .
标签: mysql math decimal bigdecimal