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

为什么mariadb中这两个选择值的结果不同?,mariadb,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" 如果答案是“FLOATis breaked”,那么我希望A和B大约等于16位有效数字,因为这是DOUBLE中可用的精度 然而,结果只有大约10位数字,

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

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


"A":"1400035.27058379"  

"B":"1400035.27026258"
如果答案是“
FLOAT
is breaked”,那么我希望
A
B
大约等于16位有效数字,因为这是
DOUBLE
中可用的精度

然而,结果只有大约10位数字,所以还有其他一些问题

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

在上添加一些尾随零将提供:

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
做错了什么

因此,我敢打赌,切换到
十进制
并使用小数位数时一定发生了一些事情

(这个答案的其余部分留作练习


好的,我不知道剩下的答案。)

这能回答你的问题吗?根据定义,浮点运算是不精确的。虽然
A
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 |
+------------------------------------+----------------------------------+
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     |