CREATE TABLE test (c1 float(10,2),c2 decimal(10,2)); Query OK, 0 rows affected (0.22 sec) mysql> insert into test value" />
mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2)); Query OK, 0 rows affected (0.22 sec) mysql> insert into test values(131072.32,131072.32); Query OK, 1 row affected (0.02 sec) mysql> insert into test values (999998.02, 999998.02); Query OK, 1 row affected (0.02 sec) mysql> select * from test; +-----------+-----------+ | c1 | c2 | +-----------+-----------+ | 131072.31 | 131072.32 | | 999998.00 | 999998.02 | +-----------+-----------+ 1 row in set (0.00 sec)
從上面的例子中我們看到c1列的值由131072.32變成了131072.31;999998.02變成了999998.00,這就是浮點數(shù)的不精確性造成的。
在mysql中float、double(或real)是浮點數(shù),decimal(或numberic)是定點數(shù)。
浮點數(shù)相對于定點數(shù)的優(yōu)點是在長度一定的情況下,浮點數(shù)能夠表示更大的數(shù)據(jù)范圍;它的缺點是會引起精度問題。
在今后關(guān)于浮點數(shù)和定點數(shù)的應(yīng)用中,大家要記住以下幾點:
1、浮點數(shù)存在誤差問題;
2、對貨幣等對精度敏感的數(shù)據(jù),應(yīng)該用定點數(shù)表示或存儲;
3、編程中,如果用到浮點數(shù),要特別注意誤差問題,并盡量避免做浮點數(shù)比較;
4、要注意浮點數(shù)中一些特殊值的處理。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com