![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-14 13:08 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路]批处理实现数字金额转大写 |
| 可打印版本 14,355 / 24 |
| 第1楼 无奈何 | 发表于 2007-01-01 05:58 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
[共同参与][挑战思路]批处理实现数字金额转大写 看到坛子里越来越多关于挑战批处理算法的讨论,也涌现出一批热衷于挖掘批处理潜能的兄弟,一些批处理不太适合的工作,也渐由批处理来完成,我很是高兴。
现拟一题目--数字金额转大写,这个议题在网上几乎可以找到任何流行语言的版本,唯独缺少批处理版的,这个问题当然不能指望老外来做,然后我们再借鉴 ^_^。 规则如下: 1、接收一串金额数字,转为大写,可能出现的合理格式 为 5821564130 或 5821564.130 或 5,821,564.130 等, 不会出现格式为 58.215.64.130 等小数位不明的数字或其他非金额数字字符。 2、最大位到千亿即可,最小位到分其后忽略。 3、CMD下纯批处理完成,不使用第三方工具。 4、具体转换依据见附录。 附录:
进制关系表: ┌─┬─┬─┬───┐ │小│简│繁│ 进制 │ ├─┼─┼─┼───┤ │一│壹│壹│ 1 │ ├─┼─┼─┼───┤ │二│贰│貳│ 2 │ ├─┼─┼─┼───┤ │三│叁│叄│ 3 │ ├─┼─┼─┼───┤ │四│肆│肆│ 4 │ ├─┼─┼─┼───┤ │五│伍│伍│ 5 │ ├─┼─┼─┼───┤ │六│陆│陸│ 6 │ ├─┼─┼─┼───┤ │七│柒│柒│ 7 │ ├─┼─┼─┼───┤ │八│捌│捌│ 8 │ ├─┼─┼─┼───┤ │九│玖│玖│ 9 │ ├─┼─┼─┼───┤ │十│十│拾│ 10 │ ├─┼─┼─┼───┤ │百│佰│佰│ 100 │ ├─┼─┼─┼───┤ │千│仟│仟│ 1000 │ ├─┼─┼─┼───┤ │万│万│萬│ 10^4 │ ├─┼─┼─┼───┤ │亿│亿│億│ 10^8 │ ├─┼─┼─┼───┤ │兆│兆│兆│ 10^12│ └─┴─┴─┴───┘ 详见:http://wiki.keyin.cn/index.php?title=%E4%B8%AD%E6%96%87%E6%95%B0%E5%AD%97&variant=zh-cn |
|
| 第2楼 youxi01 | 发表于 2007-01-01 12:02 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
写了一段到头来连自己都“看不懂”的代码:
[ Last edited by youxi01 on 2007-1-1 at 11:04 PM ] |
|
| 第3楼 tigerpower | 发表于 2007-01-01 12:43 |
| 中级用户 发帖 99 积分 377 | |
|
哈哈,厉害厉害!!!
去掉空行共63行,不是很长!!! 用纯粹的批处理能写出这样的程序,精彩!!!佩服!!! 美中不足有二: 1. "十"、"百"、"千"应为"拾"、"佰"、"仟",这是语文的问题,应该不算bug:) 2. 当输入是0.xx时好像有点问题。 |
|
| 第4楼 youxi01 | 发表于 2007-01-01 12:50 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
谢谢楼上的提醒,已更正!
|
|
| 第5楼 无奈何 | 发表于 2007-01-01 12:54 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
RE youxi01
兄的代码转换效果非常不错。 初步测试,非常合乎规范要求,加分鼓励。 还有一点建议,帖完整功能的批处理时,推荐属上自己的名字与出处地址等,当多次转贴后,别人发现问题或想与作者交流时不因无处联系作者而苦恼,当然也会更好的保护你的劳动成果。推荐的格式为 作者@论坛 这样的形式,以上只是建议仅供参考。 RE tigerpower 零开头的数字,不为合理的金额,可以忽略,当然去除掉也不是很困难的事。 [ Last edited by 无奈何 on 2007-1-1 at 01:05 PM ] |
|
| 第6楼 qzwqzw | 发表于 2007-01-02 00:23 |
| 银牌会员 发帖 636 积分 2,343 | |
|
凑个热闹吧
采用分步替换的原则,一则简化算法,二则易于控制(比如零元——元零的替换) 特意将兆省略了,因为很少有如此多的人民币金额 而且对于京、兆之类的词汇有多种解释 很多时候一兆等于一百万(1M),也有时候一兆等于一亿亿 另外,有谁有兴趣编个反向转换算法? 以及相关的罗马数字与阿拉伯数字的相互转换? [ Last edited by qzwqzw on 2007-1-1 at 11:29 AM ] |
|
| 第7楼 无奈何 | 发表于 2007-01-02 01:02 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
RE qzwqzw
兄的代码也同样非常出色,并且极其简洁。 金额中含有 “,” 时会出错,“,” 也为合理的金额字符,请稍加完善一下。 兆的概念中国传统和国际单位是不同的,中国传统为一万亿。 详情可以参考下一楼给出的链接。 [ Last edited by 无奈何 on 2007-1-2 at 01:10 AM ] |
|
| 第8楼 qzwqzw | 发表于 2007-01-02 01:28 |
| 银牌会员 发帖 636 积分 2,343 | |
|
加了一些验证代码,很影响代码的简洁,有些郁闷
可以通过带有前缀0的数字,含,的数字,以.前缀的小数 可以禁止含有非法字符的金额 ----------------------------------------------------------------- 国际单位的量级是没有兆的,只有m/K/M等 最早是谁将M译为“兆”的已经很难考证 但现在已经很流行,某些会计学教材也开始采用 ------------------------------------------------------------------------ 至于中国传统的计数,你可以用“亿、兆、京、垓”百度一下 -------------------------------------------------------------------------- [ Last edited by qzwqzw on 2007-1-1 at 12:36 PM ] |
|
| 第9楼 无奈何 | 发表于 2007-01-02 12:54 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
RE qzwqzw
简单了解一下,传统的计数以十进制的。上面的表格称作现行通常用的好像比较合适。超大的数字也不太常用,仅当作趣闻知识吧。 |
|
| 第10楼 qzwqzw | 发表于 2007-01-03 01:54 |
| 银牌会员 发帖 636 积分 2,343 | |
|
做了一个简单的阿拉伯数字转罗马数字的例子
考虑到规则的不统一和算法的复杂性,没有支持49->IL之类的转化 也没有支持超过4000的数字 反向转换相对困难一些 不过一旦建立了良好的数据结构,算法也就很清晰了 [ Last edited by qzwqzw on 2007-1-2 at 01:17 PM ] |
|
| 第11楼 HUNRYBECKY | 发表于 2007-01-03 02:05 |
| 银牌会员 发帖 442 积分 1,179 | |
|
欣赏大作。
|
|
| 第12楼 tghksj | 发表于 2007-01-03 03:26 |
| 社区乞丐 发帖 90 积分 -49 | |
|
怎么又是 qzwqzw
我现在快成了你的FANS了. 你出一段代码,就够我看个一两天的.... 老样子加上两分,拿回家看... |
|
| 第13楼 flamey | 发表于 2007-01-03 04:51 |
| 初级用户 发帖 74 积分 152 | |
|
qzwqzw~~~~利害!!!!!
|
|
| 第14楼 qzwqzw | 发表于 2007-01-03 23:40 |
| 银牌会员 发帖 636 积分 2,343 | |
| 第15楼 namejm | 发表于 2007-01-03 23:47 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
呵呵,qzwqzw 厉害。建议把各种类型的转换开成专帖发表,做到专帖专用,这样有利于日后的深入讨论和论坛的检索。
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |