考虑以下。
CREATE TABLE IF NOT EXISTS `docs` (
`id` int(6) unsigned NOT NULL,
`qty` float NOT NULL,
`price` float NOT NULL,
`rebate` float not null,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` VALUES
(1,1,43616.7,0);
SELECT SUM(qty * (price - price * rebate/100)) AS endval
FROM docs
此查询没有按预期返回 43616.7,而是返回 43616.69921875(在某些机器上为 43616.671875)。演示小提琴可以在这里找到。
为什么会这样?我希望它能够像这样工作(为实际输入像这样基本的东西道歉):
1 * (43616.7 - 43616.7 * 0 / 100) = 1 * (43616.7 - 0) = 43616.7
我意识到我可以通过使用decimal (10,2)
我的专栏来克服这个问题,我只是想知道是什么导致了这种意外行为。