人民币金额小写转大写

简介:

 

 
  1. @echo off  
  2. setlocal EnableDelayedExpansion  
  3.  
  4. set tbl1=零壹贰叁肆伍陆柒捌玖  
  5. set tbl2=分角元拾佰仟万拾佰仟亿拾佰仟  
  6.  
  7. :test_  
  8. setlocal  
  9. set /p num=请输入金额(小于一万亿元):  
  10.  
  11. for /f "tokens=1,2 delims=." %%f in ("%num%") do (  
  12.     set num2=%%g00  
  13.     set num=%%f!num2:~0,2!  
  14. )  
  15.  
  16. :loop  
  17. call set rmb=%%tbl1:~%num:~-1,1%,1%%%%tbl2:~%bit%,1%%%rmb%  
  18. set /a bit+=1  
  19. set num=%num:~0,-1%  
  20. if not "%num%"=="" goto loop  
  21.  
  22. set rmb=%rmb:零拾=零%  
  23. set rmb=%rmb:零佰=零%  
  24. set rmb=%rmb:零仟=零%  
  25. set rmb=%rmb:零零=零%  
  26. set rmb=%rmb:零零=零%  
  27.  
  28. set rmb=%rmb:零元=元零%  
  29. set rmb=%rmb:零万=万零%  
  30. set rmb=%rmb:零亿=亿零%  
  31. set rmb=%rmb:零零=零%  
  32.  
  33. set rmb=%rmb:零分=零%  
  34. set rmb=%rmb:零角=零%  
  35. set rmb=%rmb:角零=角%  
  36. set rmb=%rmb:零零=整%  
  37.  
  38. echo 人民币%rmb%  
  39.  
  40. endlocal  
  41. goto test_  
  42.  
  43.  
  44.  
  45. :: 数字金额转大写  
  46. ::code by youxi01@cn-dos.net  
  47. ::date 2006-1-1(Happy new year!best wishes to everyone!)  
  48. ::出处:http://www.cn-dos.net/forum/viewthread.php?tid=26230 
  49. @echo off  
  50. setlocal enabledelayedexpansion  
  51. set /a a=0,b=0,c=0 
  52.  
  53. ::================================  
  54. ::设置单位名称;  
  55. SET NAME0=仟  
  56. SET NAME1=佰  
  57. SET NAME2=拾  
  58. SET NAME3=  
  59. ::================================  
  60.  
  61. ::=============================================  
  62. ::设置数字对应的大写中文汉字  
  63. for %%i in (零 壹 贰 叁 肆 伍 陆 柒 捌 玖) do (  
  64.      set BIG!a!=%%i  
  65.      set /a a+=1)  
  66. ::=============================================  
  67.  
  68. ::=======================================================================  
  69. ::在以下“函数”的处理过程中,要用到"#"对数字进行对齐(都成四位),以便截取;  
  70. ::这里设置凡是出现"#"的地方都设置为空。  
  71. set BIG#=  
  72. ::=======================================================================  
  73.  
  74. set EN=  
  75.  
  76. ::====================================================  
  77. ::这里对输入的数字进行处理,分别取出整数部分和小数部分;  
  78.  
  79. set /p EN=请输入金钱数(1000亿以内):  
  80. for /f "tokens=1,2* delims=." %%i in ("%EN%") do (  
  81.       set "round=%%i"  
  82.       set "dec=%%j00" 2>nul)  
  83. ::=====================================================  
  84. set /a round=%round:,=%  
  85. set dec=%dec:~0,2%  
  86.  
  87. :test  
  88.    set /a b+=1  
  89.    ::=============================================  
  90.    ::每四位数字为一组,对原来的数据进行截取;  
  91.    if %round% gtr 9999 (  
  92.       set num!b!=!round:~-4!  
  93.       set round=!round:~0,-4!  
  94.       goto :test) else set num!b!=!round!  
  95.    ::==============================================  
  96.  
  97. ::=====================================================  
  98. ::分别对1、2、3段数据进行处理;分别赋予单位:元、万、亿  
  99. ::同时,分别将返回的数据传给str1,str2,str3(利用%3来控制)。  
  100. call :test1 %num1% 元 1  
  101. call :test1 %num2% 万 2  
  102. call :test1 %num3% 亿 3  
  103. ::======================================================  
  104.  
  105. ::====================================================================  
  106. ::去掉数字大写里多余的"零"。比如,1002,处理后读出来为:"壹千零贰元整"  
  107. ::符合我们中国人一般的读数方法;同时将结果分别传入str1,str2,str3(%2控制)。  
  108. call :test2 %str1% 1  
  109. call :test2 %str2% 2  
  110. call :test2 %str3% 3  
  111. ::=====================================================================  
  112.  
  113. ::==============================================================  
  114. ::防止类似2,0000,1002.00形式出现错误(错误读为:2亿万1千零2元整)  
  115. if "!str2!"=="零万" set str2=零  
  116. ::===============================================================  
  117.  
  118. set str=%str3%%str2%%str1%  
  119. set str=%str:零元=元%  
  120. set str=%str:零万=万%  
  121. set str=%str:零亿=亿%  
  122.  
  123. ::防止整数部分为0;  
  124. if "%str%"=="元" set str=零元  
  125.  
  126. ::对小数部分数字进行处理;  
  127. if "%dec%"=="00" (set dec=整) else (  
  128.     set /a dec1=!dec:~0,1!  
  129.     set /a dec2=!dec:~1,1!  
  130.     if !dec1! EQU 0 (set dec1=零) else call set dec1=%%BIG!dec1!%%角  
  131.     if !dec2! EQU 0 (set dec2=) else call set dec2=%%BIG!dec2!%%分  
  132.     set dec=!dec1!!dec2!  
  133. )  
  134. echo.  
  135. echo ========================  
  136. echo 你输入的金钱数目大写为:  
  137. echo.  
  138. echo %str:零零=零%%dec%  
  139. echo ========================  
  140. pause>nul  
  141.  
  142. :test1  
  143.     if not "%1"=="" (  
  144.         set temp=####%1  
  145.         set temp=!temp:~-4!  
  146.         for /l %%i in (0 1 3) do (  
  147.                set tmp%%i=!temp:~%%i,1!  
  148.                if defined tmp%%i (  
  149.                   if !tmp%%i! GTR 0 (call set str%3=!str%3!%%BIG!tmp%%i!%%!NAME%%i!) else (  
  150.                          call set str%3=!str%3!%%BIG!tmp%%i!%%)))  
  151.        set str%3=!str%3!%2  
  152.        ) else set str%3=  
  153.      goto :eof  
  154.  
  155. :test2  
  156.      set tmp=%1  
  157.      set tmp=%tmp:零零=零%  
  158.      set str%2=%tmp:零零=零%  
  159.      goto :eof 

 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/413673,如需转载请自行联系原作者


相关文章
|
C++
基于C++的简易计算器设计与实现
基于C++的简易计算器设计与实现
744 3
|
Docker 容器 数据格式
Docker 修改镜像源地址
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80417198 我的Docker 版本为 1.
42623 0
|
3月前
|
安全 Shell Linux
深入剖析Sudo提权:白帽子的防御视角与审计指南
本文深入解析Linux系统中`sudo`提权的常见手法,从白帽子视角出发,剖析攻击原理并提供实用防御与审计策略,助力加固系统权限安全。
394 1
|
9月前
|
存储 人工智能 自然语言处理
智能系统的知识库管理技术
本方案聚焦智能系统的知识库管理,深度融合AI技术与精细化流程控制。通过多模态数据统一存储,实现文本、语音、图像等全格式兼容与智能解析;构建全流程内容管理体系,涵盖创建、审核、更新环节,确保信息精准可靠;提供智能标签分类、版本追溯功能,支持秒级定位与历史对比;采用语义检索技术,打破数据孤岛,助力企业高效利用与优化知识资产,保障安全存储及持续增值。
394 1
|
10月前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
6214 119
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
9月前
|
消息中间件 JavaScript 前端开发
最细最有条理解析:事件循环(消息循环)是什么?为什么JS需要异步
度一教育的袁进老师谈到他的理解:单线程是异步产生的原因,事件循环是异步的实现方式。 本质是因为渲染进程因为计算机图形学的限制,只能是单线程。所以需要“异步”这个技术思想来解决页面阻塞的问题,而“事件循环”是实现“异步”这个技术思想的最主要的技术手段。 但事件循环并不是全部的技术手段,比如Promise,虽然受事件循环管理,但是如果没有事件循环,单一Promise依然能实现异步不是吗? 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您
|
Docker 容器
docker 换国内镜像源,docker换源
docker 换国内镜像源,docker换源
10544 91
|
Java 应用服务中间件 测试技术
NoInitialContextException 异常通常会在哪些场景下出现
NoInitialContextException 异常通常在尝试使用 JNDI(Java 命名和目录接口)进行资源查找时,因缺少必要的环境配置或初始化上下文未正确设置而出现。常见于 Java EE 应用中。
214 5
|
数据可视化 SDN Python
广义曼德勃罗特集的探索与交互式可视化
这篇文章介绍了如何使用Python和matplotlib库创建广义曼德勃罗特集的交互式可视化。作者探讨了曼德勃罗特集的基本概念,包括其自相似性和复杂边界,并扩展到广义集合,其中幂运算指数可以是任意复数。通过提供的Python代码示例,读者可以学习如何绘制并实现鼠标驱动的放大缩小功能,从而深入探索这个数学结构的细节。文章鼓励读者修改指数以观察不同形态,并提供了相关参考资料链接。
|
Windows
Windows 使用windump进行循环抓包
Windows 使用windump进行循环抓包
9474 0