我有这种数字格式:
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";
}
}
答案 0 :(得分: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";
}
答案 1 :(得分:0)
你可以在这里阅读Comma as a decimal separator in sprintf in en_CA locale
您不必链接preg_replace
,printf
和str_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>";