PHP 用逗号替换点不起作用


PHP Replacing dot with comma's not working

我有这个数字格式:

39289.95

我希望它看起来像:

39289,95

我的问题是,如果我使用:

str_replace('.', ',', $data)

strtr($data, '.', ',')

number_format($data, 2, ',', '')

我得到

39289.00

在使用 str 函数之前,我尝试在字符串中转换变量,但没有运气,它总是在最后给我一个"点"和 2 个零。如何将数据格式化为39289,95?

请注意,数据来自 odbc 插件,但我认为它不会改变任何东西。这似乎确实是一个简单的问题,但我尝试的只是"应该"工作,因为我在许多论坛和堆栈溢出问题中搜索,但我的没有。谢谢。

编辑(完整代码):

while (odbc_fetch_row($r)) {

  printf("<tr class='ter%s' >",trim(odbc_result($r,1)));
  printf("<td> %s</td>",odbc_result($r,1));

  $data = odbc_result($r,2);
  $str = preg_replace('/'./', ',', $data);
  //$data = number_format($data, 2, '.', '');
  //$data = strtr($data, ".", ",");
  //$data = str_replace('.',',',$data);
  printf("<td align=right> %6.2f</td>",$str);
  echo "</tr>'n";
}
 }

问题出在"printf"中,它将字符串转换回带有点 (.) 的数字

while (odbc_fetch_row($r)) { 
    printf("<tr class='ter%s' >",trim(odbc_result($r,1)));
    printf("<td> %s</td>",odbc_result($r,1));
    $data = odbc_result($r,2);
    $str = preg_replace('/'./', ',', $data);
    $str2 = sprintf("<td align=right> %6.2f</td>",$str);
    echo str_replace('.',',',$str2);
    echo "</tr>'n";
}

正如你可以在这里读到的 逗号作为en_CA语言环境中 sprintf 中的小数分隔符

您不必将preg_replaceprintfstr_replace链接起来,只需使用number_format根据需要格式化您的号码:

...
$data = odbc_result($r, 2);
printf("<td align=right> %s</td>", number_format($data, 2, ',', ''));
echo "</tr>'n";
...

echo "<td align=right> ".number_format($data, 2, ',', '')."</td>";