我试图将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浮在数据库中。
答案 0 :(得分:1)
尝试使用PDO::PARAM_STR
而不是PDO::PARAM_INT
。
$q->bindParam(":balance" , $return["reward"] , PDO::PARAM_STR);
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位数字,根据需要进行更改。