0

我有这个数字格式:

39289.95

我希望它看起来像:

39289,95

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

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

或者

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

或者

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

我明白了

39289.00

在使用 str 函数之前,我尝试将变量转换为字符串,但运气不好,它总是给我一个“点”和最后的 2 个零。我怎样才能格式化我的数据看起来像 39289,95 ?

请注意,数据来自 odbc 插件,但我认为它不会改变任何东西。这似乎是一个简单的问题,但我所尝试的只是“应该”在我在许多论坛和 stackoverflow 问题中搜索时工作,但我没有。谢谢你。

编辑(完整代码):

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";
}
 }
4

2 回答 2

0

问题出在“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";
}
于 2014-08-30T23:33:18.987 回答
0

如您在此处阅读的,逗号作为 en_CA 语言环境中 sprintf 中的小数点分隔符

您不必链接preg_replace,printfstr_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>";
于 2016-09-07T10:05:48.753 回答