如何在mysql中插入float,然后查询eqality

如何在mysql中插入float,然后查询eqality,mysql,floating-point,Mysql,Floating Point,Wowee..mysql是否与浮动一起工作 1) 我在mysql字段中插入一个浮点 价格=0.1 2) 我运行以下查询: select * from buy_test where price = 0.1 select * from buy_test where price < 0.1 I get no results 哇!我没有结果 3) 我运行以下查询: select * from buy_test where price = 0.1 select * from buy

Wowee..mysql是否与浮动一起工作

1) 我在mysql字段中插入一个浮点 价格=0.1

2) 我运行以下查询:

select * from buy_test where price = 0.1  
select * from buy_test where price < 0.1 

I get no results
哇!我没有结果

3) 我运行以下查询:

select * from buy_test where price = 0.1  
select * from buy_test where price < 0.1 

I get no results
耶!我得到了结果,但没有。我想要的是价格=0.1

如何将浮点插入mysql以便在mysql中查询浮点

谢谢

CREATE TABLE `buy_test` (
  `user_id` varchar(45) DEFAULT NULL,
  `order_id` varchar(100) NOT NULL,
  `price` float DEFAULT NULL,
  `insert_time` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$

这是因为0.1不存在于浮点运算中。 在二进制中打印0.1的实数需要无穷多个数字(就像打印10/3的实数需要无穷多个数字一样)

在表中,您使用“float”类型存储价格,该类型以32位表示。值0.1四舍五入为0.1000000149011919384765625(这是浮点型格式中0.1的最接近表示形式)

当您请求价格等于0.1的所有行时,我强烈怀疑解释器使用的是double类型,或者至少是比float更精确的类型。 但是让我们考虑使用64位的双类型。 在双精度类型中,0.1四舍五入为0.100000000000000551151231257827021181583404541015625

当发动机进行比较时,会导致:

if (0.100000001490116119384765625 ==
    0.1000000000000000055511151231257827021181583404541015625) ...
这显然是错误的。但对于operator>,情况确实如此

我很确定where条款会起作用:“where价格=0.1000000149011919384765625”

顺便说一下,当你的查询结果告诉你价格是“0.1”时,这是一个谎言。该值四舍五入为“漂亮显示”

您的问题没有真正的解决方案,每个知道浮点算术问题的人都会劝阻您在浮点上使用相等比较。 您可以使用ε来满足您的请求

有一篇非常有趣的文章叫做“每个计算机科学家都应该知道的浮点运算”;你可以在那里找到它:

你能展示一下buy_测试结构吗?@VigneshKumar已经回答了你们,我没看到这个问题这么老