为什么mariadb中这两个选择值的结果不同?

时间:2019-11-08 07:48:02

标签: mariadb

为什么MariaDB中的结果A和B不同?

SELECT 23033848 * 0.1248 * 11407967/ 23423423 AS 'A', 
23033848 * 0.1248 * (11407967/ 23423423) AS 'B'


"A":"1400035.27058379"  

"B":"1400035.27026258"

1 个答案:

答案 0 :(得分:0)

如果答案只是“ FLOAT被打破”,那么我希望AB同意约16位有效数字,因为这是{{ 1}}。

但是,结果只允许约10位数字,所以还有其他事情发生。

这就是您所拥有的(添加括号以澄清):

DOUBLE

在其上加上一些尾随的零将给出:

SELECT (23033848 * 0.1248 *  11407967) / 23423423  AS 'A', 
        23033848 * 0.1248 * (11407967  / 23423423) AS 'B'

表明可能 mysql> SELECT 23033848.00 * 0.124800000000000000 * 11407967.00/ 23423423.00 AS 'A', 23033848.00 * 0.1248000000000000 * (11407967.00/ 23423423.00) AS 'B' ; +------------------------------------+----------------------------------+ | A | B | +------------------------------------+----------------------------------+ | 1400035.27058379113932237828775068 | 1400035.270583791139265109708800 | +------------------------------------+----------------------------------+ 更接近“正确”。

那么A在做什么“错”了?

B

所以,我敢打赌,切换到mysql> SELECT 11407967/ 23423423, 11407967./ 23423423., 11407967.00/ 23423423.00; +--------------------+----------------------+--------------------------+ | 11407967/ 23423423 | 11407967./ 23423423. | 11407967.00/ 23423423.00 | +--------------------+----------------------+--------------------------+ | 0.4870 | 0.4870 | 0.487032 | +--------------------+----------------------+--------------------------+ 1 row in set (0.00 sec) mysql> SHOW VARIABLES LIKE '%div%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | div_precision_increment | 4 | 并使用小数位数会发生某些事情。

(此答案的其余部分留作练习。

好的,我不知道其余的答案。