PHP 数字转大写(中文)格式,规则可以自行调整

原创
所属分类: 后端开发 2019-03-13 483
来源:baidu.com

看了网上很多篇教程,发现多多少少都有一些问题,导致部分数字无法完成转换,例如十、百、千等,或者中间会出现一些连续的零,还有一些会出现零百、零千的情况。这些问题在编写过程中也遇到过,后来参考了其他一些“大牛”的算法,最终修改成了现在的版本。送上代码~

<?php 
 
// 数字转大写
function NumberToCapital($num) {
	$num = $num * 1;
 
	$NUM_CAPITAL = [
		0 => '零',
		1 => '一',
		2 => '二',
		3 => '三',
		4 => '四',
		5 => '五',
		6 => '六',
		7 => '七',
		8 => '八',
		9 => '九'
	];
	$UNIT = ['元', '十', '百', '千', '万', '十', '百', '千', '亿'];
 
	$arr = [];
	$count = 0;
	if (10 > $num) {
		// 如果是十以内数字,直接转换
		$arr[] = $NUM_CAPITAL[$num];
	} else {
		while ($num != 0) {
			$arr[] = $UNIT[$count++];
			$temp = $num % 10;
			$arr[] = $NUM_CAPITAL[$temp];
			$num = floor($num / 10);
		}
	}
	$arr = array_reverse($arr);
 
	// 处理格式
	$str = implode('', $arr);
	$str = preg_replace("/零+元/", "", $str);
	$str = preg_replace("/零+万/", "万", $str);
	$str = preg_replace("/零十/", "零", $str);
	$str = preg_replace("/零百/", "零", $str);
	$str = preg_replace("/零千/", "零", $str);
	$str = preg_replace("/元/", "", $str);
	$str = preg_replace("/(零)+/", "零", $str);
 
	// 10~19数字需要省略十位数
	if ('一十' == substr($str, 0, 6)) {
		$str = str_replace('一十', '十', $str);
	}
 
	// 避免最后一位为0
	if (3 < strlen($str) && '零' == substr($str, -3)) {
		$str = substr($str, 0, strlen($str)-3);
	}
 
	return $str;
}
 
$num = 10101;
 
echo '<pre>';var_dump(NumberToCapital($num));exit();

如果有问题或需要优化的地方,还请大家多多指点~~

原创声明:本文为博主原创文章,转载请附上原文出处链接和声明。

相关推荐

更多内容>

PHP7+微信公众号主动通知事件mcrypt_module_open函数无法使用

后端开发

PHPExcel导出Excel基本操作,实现设置字体、合并单元格、加粗等功能

后端开发

php使用header方法下载文件

后端开发

Notice: A session had already been started - ignoring session_start()网站出现这个错误

后端开发
点这里分享到
朋友圈