PHP MYSQL在数据库0.01中保存浮点数?

时间:2018-12-28 14:40:44

标签: php mysql

我试图将MySql表中的美分保存为float,但是数据库将其错误保存了,例如我正在保存0.01,将其保存为0.1!

是否有可能做到这一点?

我的代码;

$return["reward"] = 0.05;

$api->user['balance']  += $return["reward"];

$q = $api->pdo->prepare("UPDATE " . DB_PREFIX . "user
                         SET 
                         balance = :balance
                         WHERE 
                         userid = :userid");

$q->bindParam(":balance" , $api->user['balance']  , PDO::PARAM_INT );
$q->bindParam(":userid" , $api->user['userid'] , PDO::PARAM_INT); 

balance列TYPE浮在数据库中。

3 个答案:

答案 0 :(得分:1)

尝试使用PDO::PARAM_STR而不是PDO::PARAM_INT

$q->bindParam(":balance" , $return["reward"]  , PDO::PARAM_STR);

来自Documentation

  

MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE   精度(M,D)。在此,(M,D)表示最多可以存储值   总共M位,其中D位可能在小数点后。   例如,定义为FLOAT(7,4)的列将看起来像-999.9999   显示时。 MySQL在存储值时执行四舍五入,因此如果您   将999.00009插入FLOAT(7,4)列中,近似结果为   999.0001

另请参见https://dev.mysql.com/doc/refman/5.5/en/problems-with-float.html

答案 1 :(得分:1)

尝试将列类型更改为十进制并将“长度”设置为7.2。这将是点前七个数字,点后第二个

答案 2 :(得分:1)

此错误与您的代码无关。

您正在使用数据类型float,该数据类型不应用于存储货币值。

将数据类型更改为decimal,这被认为是存储货币价值的最佳做法。

您可以通过phpMyAdmin的Web界面或类似这样的查询来更改它:

ALTER TABLE tablename MODIFY columnname DECIMAL(5,2);

这将允许您在逗号前存储5位数字,在逗号后存储2位数字,根据需要进行更改。