解释
当对MySQL中的小数进行精确计算时,它将字符串作为浮点数处理,而不是固定的--例如,如果我们在数据库中有下面的列(DECIMAL(43,20)
类型)
+--------------------------+
| amount |
+--------------------------+
| 0.20000000000000000000 |
+--------------------------+
运行以下PHP代码
$amount_to_add = "0.1";
$stmt = $dbh->prepare("UPDATE table SET amount = amount + :amount");
$stmt->bindValue("amount", $amount_to_add);
$stmt->execute();
将导致以下情况:
+--------------------------+
| amount |
+--------------------------+
| 0.30000000000000004000 |
+--------------------------+
注意附加的0.00000000000000004000
因为$amount_to_add
是字符串
由于我需要使用BC数学函数,它的输出是始终字符串
And i can't convert it to double/float inside PHP because it will lose precision and decimal points
问题
我应该如何将其传递给MySQL,以将其视为十进制(固定)而不是字符串(浮点),而后者不需要在PHP中更改字符串类型?
是否可以在运行查询时声明数据类型?因此,它在MySQL中将字符串更改为十进制。
发布于 2015-05-05 15:48:10
UPDATE table SET amount = amount + CAST(:amount AS DECIMAL(X, Y))
https://stackoverflow.com/questions/30064941
复制相似问题