使用PHP和mysqli从float()列中选择float number

使用PHP和mysqli从float()列中选择float number,php,floating-point,mysqli,bind-variables,Php,Floating Point,Mysqli,Bind Variables,你好。我在使用mysqliclass的绑定变量从MySQL数据库中选择float number时遇到问题 price列的类型是FLOAT(9,2)及其值1.01 简化代码: $stmt = $dbh->prepare('SELECT price FROM goods WHERE id=5'); $stmt->execute(); $stmt->bind_result(&$price); $stmt->fetch(); echo $price; // 1.00999

你好。我在使用
mysqli
class的绑定变量从MySQL数据库中选择float number时遇到问题

price
列的类型是
FLOAT(9,2)
及其值
1.01

简化代码:

$stmt = $dbh->prepare('SELECT price FROM goods WHERE id=5');
$stmt->execute();
$stmt->bind_result(&$price);
$stmt->fetch();
echo $price;
// 1.0099999904633
据我所知,
mysqli
自动将其转换为double。但是为什么呢

当我将表中的列类型更改为
DOUBLE(9,2)
时,一切正常,
$price
值正好是
1.01

是否有任何方法可以获取
1.01
列类型为
FLOAT(9,2)
$price
变量的值(无舍入函数)

谢谢。

如上所述:


1.01不能精确表示为浮点数。如你所见,你能来的最近距离是1.0099999。。。。如果要在数据库中存储货币值,请不要使用浮动。使用十进制类型或整数,并将美元/美分值转换为美分


在处理货币值时,最好使用十进制而不是浮点数,因为这有助于防止任何语言中浮点数出现的小舍入错误,甚至可以将值存储为整数美分而不是十进制美元。1.01不能准确地表示为浮点数。如你所见,你能来的最近距离是1.0099999。。。。如果要在数据库中存储货币值,请不要使用浮动。使用十进制类型或整数,并将美元/美分值转换为美分。