PHP float/double 存储为 MySQL DECIMAL

标签 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,但结果相同。有趣的是,虽然同一段代码在几周前运行良好,但我不记得对数据库结构或数据库类进行的任何更改可能会导致此问题。

最佳答案

使用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

关于PHP float/double 存储为 MySQL DECIMAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434762/

相关文章:

php - PDO 参数绑定(bind)问题

javascript - 在幻灯片中添加后退和前进功能

MySQL批量插入

arrays - 在 C 中实现 memset 以设置整个字而不是逐字节设置

javascript - 客户端和服务器端编程有什么区别?

php - 将 html 日期和时间转换为我的数据库日期时间列

php - 菜鸟在这里 : I'm having trouble understanding the logic behind this regular expression search

php - 如何使用 php 更新 sql 中的图像

ios - 如何将 UIViewController 类型传递给函数并在 iOS Swift 中类型转换变量?

Java:类型转换问题