PHP人民币大写转换函数

在企业财务管理中,需要使用到转换大写人民币金额的功能。在PHP中有许多函数实现人民币大写转换,但常见的是自定义函数实现人民币大写转换。本文将介绍PHP中人民币大写转换函数的实现方法。

一、使用中文字符拼接

我们可以使用中文字符进行拼接实现人民币大写转换,代码如下所示:

```php

function rmbCapital($num){

$c1 = "零壹贰叁肆伍陆柒捌玖";

$c2 = "分角元拾佰仟万拾佰仟亿";

$num = round($num, 2);

$num = $num * 100;

if (strlen($num) > 10) {

return "金额太大,请检查";

}

$i = 0;

$c = "";

while (1) {

if ($i == 0) {

$n = substr($num, strlen($num)-1, 1);

} else {

$n = $num % 10;

}

$p1 = substr($c1, 3 * $n, 3);

$p2 = substr($c2, 3 * $i, 3);

if ($i == 0 && $n == 0) {

$c = "零元";

}

if ($n != 0 || ($n == 0 && $i == 3) || ($n == 0 && $i == 7)) {

$c = $p1 . $p2 . $c;

} else {

$c = $p1 . $c;

}

$i = $i + 1;

$num = $num / 10;

if ($num < 1) {

break;

}

}

$j = 0;

$slen = strlen($c);

while ($j < $slen) {

$m = substr($c, $j, 6);

if ($m == "零元" || $m == "零万" || $m == "零亿" || $m == "零角" || $m == "零分" || $m == "零拾" || $m == "零佰" || $m == "零仟") {

$left = substr($c, 0, $j);

$right = substr($c, $j + 3);

$c = $left . $right;

$slen = $slen - 3;

} else {

$j = $j + 3;

}

}

if (substr($c, strlen($c)-3, 3) == "零") {

$c = substr($c, 0, strlen($c)-3);

}

if (empty($c)) {

return "零元整";

} else {

return mb_substr($c, 0, mb_strlen($c,'utf-8')-1, 'utf-8')."整";

}

}

```

函数解析:

1、设定字符集,$c1表示数字读法,$c2表示金额单位。

2、将传入的数值$x乘100,再进行四舍五入,将小数点之后的位数保留两位。

3、设定一个计数变量$i,如果小数点之前的数字大于$10,直接返回"金额太大,请检查"。

4、如果$i为0,说明当前数字为小数部分,则从字符串的最后一位开始截取一位数字$n,否则从当前数值与10求余数,保留一位数字$n。

5、根据$n从$c1和$c2中找出对应的中文字符$p1和$p2。其中$c1中的3个字符表示一个归档单位,如零、壹、贰表示0、1、2这三个数字。$c2中的3个字符表示金额单位,如零、元、拾表示1、10、100这三个金额单位。

6、根据$n和$i的值,判断是否需要添加单位“元”,并使用$p1和$p2拼接当前的中文字符$c。

7、重复第4步至第6步直到数值变为0,并返回拼接好的中文字符$c。

8、将$c中的“零元”、“零万”、“零亿”、“零角”、“零分”、“零拾”、“零佰”和“零仟”去掉。

9、将$c中最后的“零”去掉。

10、如果$c为空,说明传入的金额$x为0元,返回零元整;否则,去掉$c末尾的“元”字符,并添加“整”字符。

二、使用构造函数实现封装

我们可以使用构造函数实现对人民币大写转换方法的封装,代码如下所示:

```php

class RmbCapital

{

private $num;

private $c1 = "零壹贰叁肆伍陆柒捌玖";

private $c2 = "分角元拾佰仟万拾佰仟亿";

public function __construct($num)

{

$this->num = round($num, 2) * 100;

if (strlen($this->num) > 10) {

throw new Exception("金额太大,请检查");

}

}

public function __toString()

{

$i = 0;

$c = "";

while (1) {

if ($i == 0) {

$n = substr($this->num, strlen($this->num)-1, 1);

} else {

$n = $this->num % 10;

}

$p1 = substr($this->c1, 3 * $n, 3);

$p2 = substr($this->c2, 3 * $i, 3);

if ($i == 0 && $n == 0) {

$c = "零元";

}

if ($n != 0 || ($n == 0 && $i == 3) || ($n == 0 && $i == 7)) {

$c = $p1 . $p2 . $c;

} else {

$c = $p1 . $c;

}

$i = $i + 1;

$this->num = $this->num / 10;

if ($this->num < 1) {

break;

}

}

$j = 0;

$slen = strlen($c);

while ($j < $slen) {

$m = substr($c, $j, 6);

if ($m == "零元" || $m == "零万" || $m == "零亿" || $m == "零角" || $m == "零分" || $m == "零拾" || $m == "零佰" || $m == "零仟") {

$left = substr($c, 0, $j);

$right = substr($c, $j + 3);

$c = $left . $right;

$slen = $slen - 3;

} else {

$j = $j + 3;

}

}

if (substr($c, strlen($c)-3, 3) == "零") {

$c = substr($c, 0, strlen($c)-3);

}

if (empty($c)) {

return "零元整";

} else {

return mb_substr($c, 0, mb_strlen($c,'utf-8')-1, 'utf-8')."整";

}

}

}

```

代码解析:

1、定义一个类RmbCapital,用于封装人民币大写转换方法。

2、定义私有变量$num、$c1和$c2分别用于存放转换的数值、数字读法和金额单位。

3、在构造函数中对传入的数值进行四舍五入,并将小数点之后的位数保留两位,存入私有变量$num中。如果传入的数值大于等于1亿,则抛出异常。

4、在__toString()方法中实现人民币大写转换,将转换后的金额字符串返回。

实际使用时,我们可以直接创建RmbCapital类实例,并将转换的数值传入构造函数中。示例代码如下:

```php

$money = new RmbCapital(123456789.12);

echo $money;

```

输出结果:

```php

壹亿贰仟叁佰肆拾伍万陆仟柒佰捌十玖元壹角贰分

```

总结:

在财务管理中,人民币大写转换是非常常见的需求。通过本文的介绍,我们可以发现PHP提供了许多实现人民币大写转换的方法,其中最常见的是自定义函数和利用构造函数进行封装的方法。使用自定义函数,需要根据数字读法和金额单位将拼接好的中文字符进行处理,从而保证输出结果的正确性;而利用构造函数进行封装,则可以更加方便地使用人民币大写转换方法,并且可以将该方法进行封装,提高代码复用性和安全性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(120) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部