为什么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

如果答案只是“ FLOAT已损坏”,那么我希望AB同意约16个有效数字,因为这是DOUBLE可用的精度。

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

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

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     | 

因此,我敢打赌,切换到DECIMAL并使用小数位数会发生一些事情。

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

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

  ask by kimtheho translate from so

本文未有回复,本站智能推荐: