我有这个数字格式:
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_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>";