数字转人民币大写,PHP实现
2021/11/12 17:12:26
本文主要是介绍数字转人民币大写,PHP实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/** * 获取人民币数字大写 * @param int|string $num * @return string */ function get_rmb(int|string $num): string { $str = ''; $a = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; $b = ['分', '角', '元', '整']; $c = ['', '拾', '佰', '仟']; $d = ['万', '亿']; // 四舍五入 保留两位小数 $num = sp_round($num, 2); // 反转字符串 $num = strrev($num); // 小数 if (($point = strpos($num, '.')) !== false) { if ($point == 2) { $str .= $b[0] . $a[$num[0]] . ($num[1] ? $b[1] : '') . $a[$num[1]]; // 角分 } else { $str .= $b[1] . $a[$num[0]]; // 角 } $num = substr($num, $point + 1); } else { $str .= $b[3]; // 整 } $str .= $b[2]; // 元 $is_pass = false; // 是否经过一位非零数字 $no_zero = true; // 没有零 $len = strlen($num); // 字符串长度 // 第一位数字 if ($num[0]) { $is_pass = true; $str .= $a[$num[0]]; } // 第一位以后 for ($i = 1; $i < $len; ++ $i) { // 处理万亿 if (($mod = $i % 4) == 0) { $is_pass = false; // 是否经过一位非零数字 $no_zero = true; // 没有零 $div = intdiv($i, 4); $str .= str_repeat($d[1], intdiv($div, 2)); // 亿 $str .= $div % 2 ? $d[0] : ''; // 万 } if ($num[$i]) { $is_pass = true; $str .= $c[$mod] . $a[$num[$i]]; } else { if ($is_pass && $no_zero) { $str .= $a[$num[$i]]; $no_zero = false; } } } return mb_strrev($str); // 反转多字节字符串 } v(get_rmb('1004560007807005.123456')); v(get_rmb('123456789012304560.99956'));
注:依赖 sp_round函数(对长数字字符串四舍五入)mb_strrev函数(反转多字节字符串),之前文章有
执行结果:
这篇关于数字转人民币大写,PHP实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享