如何改变十进制分隔干净的输出在php组合


How to change decimal separator cleanly in outputs in php combo

我试图将数据库查询导出到CSV,并且需要使用不同的十进制逗号。在MySQL中似乎不可能改变小数逗号,所以我在PHP中尝试:

setlocale(LC_NUMERIC, "cs_CZ");

但似乎所有的数据库函数,如mysql_fetch_rowmysql_fetch_assoc,都在检索string类型的数据,而不是double类型的数据:

$res = mysql_query("select 50/3");
$row = mysql_fetch_row($res);
var_dump($row); // $row[0] is of type "string"

所以一般来说PHP已经没有double类型的数据了,只有字符串!

那么是否有一些通用的,干净的方法来指定小数点的输出?

我最终使用str_replace('.', ',', $row[0])转换字符串,但这是丑陋的两个原因:

  • 你必须知道哪个字段是double类型

我不知道你使用的是哪个数据库客户端/驱动程序,但是有像mysql_field_type -Docs 这样的东西,它会根据它的偏移量给你类型,比如0。

这应该能找出某个列是否需要重新格式化。

重新格式化,number_format <一口>文档

使用这些可以自动进行转换。


编辑:关于您的评论:

如果你想映射PHP数据类型,考虑使用MySQL Native Driver -Docs 。与PDO:

一起使用

使用mysqlnd for PDO的优点

当使用服务器端预处理语句时,

mysqlnd返回本地数据类型,例如,INT列作为整数变量返回,而不是字符串。这意味着更少的内部数据转换。<一口>

所以根据你想要达到的目标,使用正确的工具。

查看从PDO语句获取数据时的多个选项 -Docs .

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');

Try

number_format($row[0], 2, ",", ".");

这应该会改变号码的格式。(德国格式)