为什么MariaDB中的结果A和B不同?
SELECT 23033848 * 0.1248 * 11407967/ 23423423 AS 'A',
23033848 * 0.1248 * (11407967/ 23423423) AS 'B'
"A":"1400035.27058379"
"B":"1400035.27026258"
答案 0 :(得分:0)
如果答案只是“ FLOAT
被打破”,那么我希望A
和B
同意约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 |
并使用小数位数会发生某些事情。
(此答案的其余部分留作练习。
好的,我不知道其余的答案。