浮點數與定點數
為了能夠引起大家的重視,在介紹浮點數與定點數以前先讓大家看一個例子:
MySQL> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
MySQL> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
MySQL> select * from test;
+-----------+-----------+
| c1| c2|
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)
從上面的例子中我們看到c1列的值由131072.32變成了131072.31,這就是浮點數的不精確性造成的。
在MySQL中float、double(或real)是浮點數,decimal(或numberic)是定點數。
浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的數據范圍;
它的缺點是會引起精度問題。
在今後關於浮點數和定點數的應用中,大家要記住以下幾點:
1、浮點數存在誤差問題;
2、對貨幣等對精度敏感的數據,應該用定點數表示或存儲;
3、編程中,如果用到浮點數,要特別注意誤差問題,並盡量避免做浮點數比較;
4、要注意浮點數中一些特殊值的處理。