/**
* 数字转汉字描述
*/
function numToStr($num)
{
// 判断正确数字
if (!preg_match('/^(\d*)(\.\d+)?$/', $num)) return '不是正确的数字!'; // 准备参数
$num = ltrim($num, '0');
$num_arr = ['', '一', '两', '三', '四', '五', '六', '七', '八', '九'];
$desc_arr = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万亿', '十', '百', '千', '万万亿', '十', '百', '千']; // 按字符串处理
$count = strlen($num);
if ($count > count($desc_arr)) return '数字超出计算范围!';
$point = strpos($num, '.') ?: $count; // 没有点时取count for ($i = 0; $i < $count; $i++) {
$cn_zero = $num[$i] !== '0' && $num[$i - 1] === '0' && $num[$i] !== '.' ? '零' : ''; // 是否输出零
$cn_num = $i > $point && !$num_arr[$num[$i]] ? '零' : $num_arr[$num[$i]]; // 输出字数
$j = $point - $i - 1; // 计算单位数
$cn_desc = $num[$i] == '0' && $j % 4 != 0 || substr($num, $i - 3, 4) === '0000' ? '' : $desc_arr[$j]; // 输出单位
if ($i == 0 && $cn_desc == '十') $cn_num = ''; // 国人习惯一十开头不读一
if ($i === $point) $res .= '点'; // 输出点
$res .= $cn_zero . $cn_num . $cn_desc;
}
return $res;
}

  1001.3输出一千零一点三

  欢迎测试反馈~

最新文章

  1. js的一些笔记
  2. NSUserDefaults简介及使用
  3. 移动web开发--meta 之 viewport
  4. Gym 100285G Cipher Message 3
  5. 用viewpager实现图片轮播
  6. java 凯撒大帝密码
  7. JQuery为元素添加样式
  8. JS中格式化数据保留两位小数
  9. gitbook初体验
  10. Chipmunk僵尸物理对象的出现和解决(八)
  11. 使用javaScript操作页面元素
  12. 洛谷P1030求先序排列
  13. [Leetcode 771]宝石和石子 Jewels and Stones HashSet简单应用
  14. finereport 下拉复选框多选
  15. WEB服务器、HTTP服务器、应用服务器、IIS
  16. 在Windows10中运行debug程序
  17. android之自定义弹框
  18. 2、redis原生的命令操作不同数据类型
  19. vue中的filters的用法
  20. 《区块链100问》第85集:资产代币化之对标美元USDT

热门文章

  1. MVC5 + EF6 入门完整教程1
  2. n阶幻方
  3. varchar和varchar2的区别
  4. 在linux服务器上配置anaconda和Tensorflow,并运行
  5. 给小程序组件创建slot
  6. ASP.NET与.NET区别
  7. [转] Spring Boot实战之Filter实现使用JWT进行接口认证
  8. Oracle Date Function 讲解和事例
  9. jquery将日期转换成指定格式的字符串
  10. pandas中,dataframe 进行数据合并-pd.concat()