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,這就是浮點數的不精確性造成的。 在mysql中float、double(或real)是浮點數,decimal(或numberic)是定點數。 浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的數據范圍;它的缺點是會引起精度問題。 在今後關於浮點數和定點數的應用中,大家要記住以下幾點: 1、浮點數存在誤差問題; 2、對貨幣等對精度敏感的數據,應該用定點數表示或存儲; 3、編程中,如果用到浮點數,要特別注意誤差問題,並盡量避免做浮點數比較; 4、要注意浮點數中一些特殊值的處理。