明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

迅速處理 MySQL中與浮點(diǎn)比較有關(guān)的問(wèn)題

[摘要]注意,下述部分主要與DOUBLE和FLOAT列相關(guān),原因在于浮點(diǎn)數(shù)的不準(zhǔn)確本質(zhì)。MySQL使用64位十進(jìn)制數(shù)值的精度執(zhí)行DECIMAL操作,當(dāng)處理DECIMAL列時(shí),應(yīng)能解決大多數(shù)常見(jiàn)的不準(zhǔn)確問(wèn)題。...

注意,下述部分主要與DOUBLE和FLOAT列相關(guān),原因在于浮點(diǎn)數(shù)的不準(zhǔn)確本質(zhì)。MySQL使用64位十進(jìn)制數(shù)值的精度執(zhí)行DECIMAL操作,當(dāng)處理DECIMAL列時(shí),應(yīng)能解決大多數(shù)常見(jiàn)的不準(zhǔn)確問(wèn)題。

浮點(diǎn)數(shù)有時(shí)會(huì)導(dǎo)致混淆,這是因?yàn)樗鼈儫o(wú)法以準(zhǔn)確值保存在計(jì)算機(jī)體系結(jié)構(gòu)中。你在屏幕上所看到的值通常不是數(shù)值的準(zhǔn)確值。對(duì)于FLOAT和DOUBLE列類(lèi)型,情況就是如此。DECIMAL列能保存具有準(zhǔn)確精度的值,這是因?yàn)樗鼈兪怯勺址硎镜摹?

在下面的示例中,介紹了使用DOUBLE時(shí)的問(wèn)題:

以下為引用的內(nèi)容:
mysql> CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);
mysql> INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
-> (2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
-> (2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),
-> (4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),
-> (5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),
-> (6, 0.00, 0.00), (6, -51.40, 0.00);
 
mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b
-> FROM t1 GROUP BY i HAVING a <> b;
 
+------+-------+------+
i    a     b   
+------+-------+------+
    1   21.4 21.4
    2   76.8 76.8
    3    7.4   7.4
    4   15.4 15.4
    5    7.2   7.2
    6 -51.4     0
+------+-------+------+

結(jié)果是正確的。盡管前5個(gè)記錄看上去不應(yīng)能進(jìn)行比較測(cè)試(a和b的值看上去沒(méi)有什么不同),但它們能進(jìn)行比較,這是因?yàn)轱@示的數(shù)值間的差異在十分位左右,具體情況取決于計(jì)算機(jī)的體系結(jié)構(gòu)。

如果列d1和d2定義為DECIMAL而不是DOUBLE,SELECT查詢(xún)的結(jié)果僅包含1行,即上面顯示的最后1行。

關(guān)鍵詞標(biāo)簽:有關(guān),問(wèn)題,比較,解決,

學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。