MYSQL可以使用多種數(shù)據(jù)類型來存儲(chǔ)貨幣數(shù)據(jù),包括整數(shù)和浮點(diǎn)數(shù)類型。但是,由于浮點(diǎn)數(shù)存在精度問題,因此建議使用DECIMAL類型來存儲(chǔ)貨幣數(shù)據(jù)。
CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `money` decimal(10,2) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在上述例子中,DECIMAL類型被用來存儲(chǔ)貨幣數(shù)據(jù)。它有兩個(gè)參數(shù),第一個(gè)參數(shù)是表示數(shù)值的數(shù)字總位數(shù),第二個(gè)參數(shù)是表示小數(shù)位數(shù)。
這里我們將浮點(diǎn)數(shù)避免使用的原因是因?yàn)楦↑c(diǎn)數(shù)在線計(jì)算時(shí)常常會(huì)出現(xiàn)小數(shù)點(diǎn)精度錯(cuò)誤。比如在計(jì)算0.1 + 0.2時(shí),它們的和應(yīng)該是0.3,但由于浮點(diǎn)數(shù)存在精度問題,實(shí)際上的和可能是0.30000000000000004。這種情況顯然會(huì)給貨幣的計(jì)算帶來不便。
使用DECIMAL類型可以避免這些精度錯(cuò)誤,并且在存儲(chǔ)貨幣數(shù)據(jù)時(shí)保持精確,能夠確保計(jì)算結(jié)果的準(zhǔn)確性。