PHP float/double存储为MySQL DECIMAL

Ano*_*ous 3 php mysql floating-point casting decimal

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

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

2,45545345
Run Code Online (Sandbox Code Playgroud)

这被存储为

2.00000000
Run Code Online (Sandbox Code Playgroud)

我尝试了MySQL的FORMAT/CAST函数,但仍然是相同的输出.

这是查询生成的方式:

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

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

Vla*_*eda 8

使用number_format替换,with.

像这样:

number_format($value, 8, '.') // 8 = number of decimals, . = decimal separator
Run Code Online (Sandbox Code Playgroud)

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

setlocale(LC_ALL, 'en_US'); // NOT TESTED, read up on the appropriate syntax
Run Code Online (Sandbox Code Playgroud)

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

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