2010-04-27 54 views
1

所以我有一個SQL表設置爲這樣在插入時跳躍的MySQL浮點值?

CREATE TABLE IF NOT EXISTS `points` (
    `id` int(11) NOT NULL auto_increment, 
    `lat` float(10,6) NOT NULL, 
    `lng` float(10,6) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

和IM將這樣的東西

INSERT INTO `points` (`lat`, `lng`) VALUES ('89.123456','-12.123456'); 

給了我與緯度和經度爲89.123459和-12.123455

怎麼了一排?

回答

3

在計算機中,「浮點」值的存儲方式通常是數字乘以數字的平方,並且某些數字不能完全按照輸入存儲。 如果需要它確切你應該將其存儲爲DECIMAL(8,6)

1

FLOAT數據類型有舍入效果,因爲不是每個小數基10號在IEEE 754的基部-2格式對於被表示這個原因,FLOATDOUBLE PRECISION應該被認爲是不精確的數字數據類型。

閱讀:「什麼每臺計算機科學家應該知道關於浮點運算」(http://www.validlab.com/goldberg/paper.pdf

+1到@ MindStalker的答案 - 用NUMERICDECIMAL如果你需要精確的數字數據類型。