PHP float / double存储为MySQL DECIMAL

时间:2013-01-21 08:22:26

标签: php mysql casting floating-point decimal

我在MySQL中存储值时遇到了一个非常奇怪的问题。前提:

我有一个使用DECIMAL(15,8)存储货币值的表(如订单总数),但是当我尝试插入例如:

2,45545345

将其存储为

2.00000000

我尝试了MySQL的FORMAT / CAST功能,但仍然是相同的输出。

这是查询生成的方式:

$db->query("INSERT INTO `random_table_name` SET currency_value = '" . floatval($value) . "'");

我也试过doubleval,但结果相同。有趣的是,几周前这段相同的代码工作正常,我不记得db结构或db类的任何变化都可能导致这种情况。

2 个答案:

答案 0 :(得分:8)

使用number_format,替换为.

像这样:

number_format($value, 8, '.') // 8 = number of decimals, . = decimal separator

但是,您的问题似乎与当前的区域设置有关。您需要查看以下内容:setlocale()localeconv

setlocale(LC_ALL, 'en_US'); // NOT TESTED, read up on the appropriate syntax

这是执行此操作的合适方式,替代方法(如下所示),执行str_replace(',', '.'),但每次要输出字符串时都必须执行相反操作。

还有另一种选择,您可以将MySQL语言环境设置为en_US

答案 1 :(得分:3)

在插入db:

之前,将,替换为.
$value = str_replace( ',', '.', $value);

这将创建一个有效的数字,可以安全地插入到数据库中。或者只是在查询中添加它:

INSERT INTO `random_table_name` SET currency_value = '" . str_replace( ',', '.', $value ) . "'