Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中选择浮点_Php_Mysql_Floating Point_Database - Fatal编程技术网

Php 在MySQL中选择浮点

Php 在MySQL中选择浮点,php,mysql,floating-point,database,Php,Mysql,Floating Point,Database,我正在尝试根据标识符和价格在表上进行SELECT匹配,例如: SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31'; 以上返回零行,而如果删除price='101.31'位,则返回正确的行 做一个 SELECT * FROM `table`; 返回与上面相同的行,并非常清楚地说明price='101.31'。但是select无法匹配它。将=更改为可能与以下内容有关: SELECT * FROM table WHE

我正在尝试根据标识符和价格在表上进行
SELECT
匹配,例如:

SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';
以上返回零行,而如果删除
price='101.31'
位,则返回正确的行

做一个

SELECT * FROM `table`;

返回与上面相同的行,并非常清楚地说明
price='101.31'
。但是select无法匹配它。将
=
更改为
可能与以下内容有关:

SELECT * FROM table WHERE ident='ident23' AND ABS(price - 101.31) < .01;
从表中选择*,其中ident='ident23'和ABS(价格-101.31)<.01;

它不起作用,因为浮点数本质上是不精确的。实际值可能类似于“101.3100000000001”,您可以先对其使用ROUND()将其四舍五入到2位,或者更好地使用十进制类型而不是浮点数。

转换为十进制对我来说很有效:

SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);

但是,您可能想首先考虑把<代码>价格<代码>列为十进制。十进制通常被认为是处理货币价值时使用的最佳类型。

千万不要使用浮动货币。

这有用吗

SELECT * , ROUND( price, 2 ) rounded
FROM table
WHERE ident = 'ident23'
HAVING rounded = 101.31

今天,我也遇到了同样的情况,只需使用MySQL的FORMAT函数就可以解决,它将返回与WHERE子句完全匹配的结果

SELECT * FROM yourtable WHERE FORMAT(col,2) = FORMAT(value,2)

说明:
FORMAT('col name',浮点数的精度)

我一直在寻找解决方案,但最后我还是用之前的php number\u FORMAT()完成了,这是在@hmasif的解决方案中找到的

使用此选项,您将获得float-mysql匹配:

$floatmatch = number_format((float)$yourfloatvariable,5);

其中5是从小数点算起的五个字符串。e、 g.7.93643试试这个:从价格101.31一样的表格中选择*

我从哪里为客户找零钱?(对不起,这里有点店主的幽默:)这将查找表中任何值为“101”的内容。您需要将其更改为“WHERE CAST(价格为十进制(7,2))=CAST(101.31为十进制(7,2));