MySQL浮点值在插入时跳转?

时间:2010-04-27 20:42:32

标签: sql mysql floating-point

所以我有这样的SQL表设置

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;

我插入像

这样的东西
INSERT INTO `points` (`lat`, `lng`) VALUES ('89.123456','-12.123456');

给我一​​行lat和lng为89.123459和-12.123455

什么事?

2 个答案:

答案 0 :(得分:3)

在计算机中,“浮动”值通常以数字平方数的形式存储,有些数字不能完全按输入的方式存储。 如果你需要它,你应该把它存储为DECIMAL(8,6)

答案 1 :(得分:1)

FLOAT数据类型具有舍入效果,因为并非每个小数基数为10的数字都可以用IEEE 754的base-2格式表示。因此,FLOATDOUBLE PRECISION应被视为不精确的数字数据类型。

阅读:“每个计算机科学家应该知道的关于浮点算术的内容”(http://www.validlab.com/goldberg/paper.pdf

+1 @ MindStalker的答案 - 如果您需要精确的数字数据类型,请使用NUMERICDECIMAL