php money_format

时间:2009-10-08 03:27:32

标签: php format currency

我想在价格结尾处删除.00

 function getMoney($mon) {
  setlocale(LC_MONETARY, 'en_US');
  return money_format('%.2n', $mon);
 }

谢谢,

5 个答案:

答案 0 :(得分:15)

尝试使用此版本的money_format()函数:

money_format('%.0n', $mon);

根据money_format(http://us.php.net/manual/en/function.money-format.php)上的PHP文档,使格式字符串'%。2n'将强制显示带小数点的数字和小数点右边的2位小数,无论分数是多少,然后根据区域设置的国家货币格式格式化数字。

用'%.0n'替换它,你总是会在钱结束时删除小数。当然,这将删除所有值的小数,而不仅仅是最后的.00。如果要有条件地删除.00,请检查$ mon的值是否包含小数部分,如果是,则显示为'%0.2n'。

答案 1 :(得分:4)

在第一次检查时,您的代码似乎要求通过'%.2n'显示分数,但我注意到PHP function reference上的以下链接包含有关Debian set_locale()的警告。

你没有使用Debian,是吗?

答案 2 :(得分:0)

请查看PHP manual

您需要设置正确的精度:

function getMoney($mon) {
  setlocale(LC_MONETARY, 'en_US');
  return money_format('%.0n', $mon);
 }

答案 3 :(得分:0)

所以你想要删除美分,但前提是没有美分?总有快速而肮脏的正则表达式:

preg_replace("/\\.00^/", "", money_format('%.2n', $mon))

答案 4 :(得分:0)

nickf是对的(有点),而ben是错误的,你的money浮动变量可能有一个小数部分,但一旦格式化它可以舍入到0美分,所以它应该总是在事后删除。 nickf的代码应该是:
preg_replace('/\.00$/', '', money_format('%.2n', $mon))