为什么mariadb中这两个选择值的结果不同?
为什么MariaDB中的结果A和B不同为什么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位数字,
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 |