返回首页
当前位置: 主页 > 网络编程 > Php实例教程 >

实现格式化人民币金额的PHP函数使用教程

时间:2012-06-09 17:10来源:知行网www.zhixing123.cn 编辑:麦田守望者

最近的项目在处理资金这一块的功能,对人民币金额的格式化输出是必不可少的功能。这个功能比较独立而且还比较大众化,所以封装成了函数就发上去也算是方便大家,代码是用PHP写的,如果遇到了什么问题或有什么建议,请留言。

/**

* 人民币金额格式化

*

* @param string $num 金额

* @param string $separator 千位分隔符

* @param int $accuracy 精度

* @return string

*/


function RMB_format($num,$separator=',',$accuracy=2 ){

$numArr
= explode('.',$num);

$IntPart
= $numArr['0'];

$c
= strlen($IntPart);

$prefix
= NULL;

$IntPart
= $c>0 && $IntPart{0}=='-' ? $prefix = substr($IntPart,1) : $IntPart;

$IntPart
= str_pad($IntPart, $c+(3-$c%3) , '0', STR_PAD_LEFT);

$arr
= str_split($IntPart, 3);

$Int
= ltrim( implode($separator , $arr),'0'.$separator );

$Int
= empty($Int) ? '0' : $Int;

$addPart
= ( $f = strlen($numArr['1']) ) < $accuracy ? $accuracy - $f : 0;

$fractional
= empty($numArr['1'])

? str_repeat('0', $accuracy )

: substr($numArr['1'],0,$accuracy) . str_repeat('0', $addPart);



$prefix
= empty($prefix) ? $prefix : '-';

return $prefix . $Int .'.'. $fractional;

}

再写了几行单元测试来测试了一下,功能全部满足要求。

$this->assertEquals( '10.00',  RMB_format(10) );

$this
->assertEquals( '456,132.455', RMB_format(00456132.4551,',',3) );

$this
->assertEquals( '152.00', RMB_format(152) );

$this
->assertEquals( '5+154.00', RMB_format(5154,'+') );

$this
->assertEquals( '4,451.00', RMB_format(4451.00) );

$this
->assertEquals( '1,513.85', RMB_format(1513.85) );

$this
->assertEquals( '1,513.855', RMB_format(1513.8556,',',3) );

$this
->assertEquals( '0.00', RMB_format(0));

$this
->assertEquals( '0.00', RMB_format(0.00));

$this
->assertEquals( '-500.00', RMB_format(-500));

$this
->assertEquals( '00.00', RMB_format('-'));
------分隔线----------------------------
标签(Tag):php php教程 php实例教程 php5 php源代码 php基础教程 php技巧 php6
------分隔线----------------------------
推荐内容
猜你感兴趣