前面两篇介绍了阿拉伯数字与中文数字之间的互相转化。详情请见:

  • Racket实现数字与中文的转换算法一(阿拉伯数字转换为中文数字)——https://blog.csdn.net/chinazhangyong/article/details/80588160

  • Racket实现数字与中文的转换算法二(中文数字转换为阿拉伯数字)——https://blog.csdn.net/chinazhangyong/article/details/80602803

接下来我们对程序进行测试。

一、准备测试数据

这一步很关键,如果测试数据没能涵盖完整各种情况,就可能出现隐藏的Bug发现不了。之前组织了一些测试数据所做的测试就出现了后来用下边的测试数据检查出现“亿万”这样的重复分节量词Bug。

这里还是用《算法的乐趣》中提供的测试数据。由于增加了兆分节,在原有基础上增加了兆分节的测试数据。

(define ch-test-list'(("零" "一" "二" "三" "四" "五" "六" "七" "八" "九" "一十" "一十一" "一百一十" "一百一十一" "一百" "一百零二" "一千零二十" "一千零一" "一千零一十五" "一千" "一万" "二万零一十" "二万零一" "一十万" "一百万" "一千万" "一亿" "一十亿" "一十亿一千" "一十亿零一百" "二十万零一十" "二百万零一百零五" "二千万一千零七" "二十亿零一十万零一百九十" "一十亿四千零一万" "二亿零一万二千三百零一" "二十亿零五百零一万零一十" "四十亿零九百零六万零二百" "四十二亿九千四百九十六万七千二百九十五" "一千二百三十四兆五千零六万七千八百九十亿零一百二十三万四千零六十九" "五十八兆四千三百六十万二千八百九十亿零二百四十八万一千二百三十四兆五千零六万七千八百九十亿零一百二十三万四千零六十九")("零" "壹" "贰" "叁" "肆" "伍" "陆" "柒" "捌" "玖" "壹拾" "壹拾壹" "壹佰壹拾" "壹佰壹拾壹" "壹佰" "壹佰零贰" "壹仟零贰拾" "壹仟零壹" "壹仟零壹拾伍" "壹仟" "壹万" "贰万零壹拾" "贰万零壹" "壹拾万" "壹佰万" "壹仟万" "壹亿" "壹拾亿" "壹拾亿壹仟" "壹拾亿零壹佰" "贰拾万零壹拾" "贰佰万零壹佰零伍" "贰仟万壹仟零柒" "贰拾亿零壹拾万零壹佰玖拾" "壹拾亿肆仟零壹万" "贰亿零壹万贰仟叁佰零壹" "贰拾亿零伍佰零壹万零壹拾" "肆拾亿零玖佰零陆万零贰佰" "肆拾贰亿玖仟肆佰玖拾陆万柒仟贰佰玖拾伍" "壹仟贰佰叁拾肆兆伍仟零陆万柒仟捌佰玖拾亿零壹佰贰拾叁万肆仟零陆拾玖" "伍拾捌兆肆仟叁佰陆拾万贰仟捌佰玖拾亿零贰佰肆拾捌万壹仟贰佰叁拾肆兆伍仟零陆万柒仟捌佰玖拾亿零壹佰贰拾叁万肆仟零陆拾玖")(0 1 2 3 4 5 6 7 8 9 10 11 110 111 100 102 1020 1001 1015 1000 10000 20010 20001 100000 1000000 10000000 100000000 1000000000 1000001000 1000000100 200010 2000105 20001007 2000100190 1040010000 200012301 2005010010 4009060200 4294967295 12345006789001234069 5843602890024812345006789001234069)))

可以看到,这里用了一个嵌套列表(二维数组)保存并提供了测试数据。

二、导入转换程序

(require "number-chinese.rkt""chinese-number.rkt")

三、测试阿拉伯数字转中文数字

用for/list对列表进行遍历并进行检测即可。

;测试数字转中文:
(display ;打印简体转换。(for/list [(num (list-ref ch-test-list 2))(ch (list-ref ch-test-list 0))](if (equal? (number->chinese num) ch)(format "~a->~a\n" num ch)(format "错误!~a预期生成~a,实际生成~a\n"num ch (number->chinese num)))))
(display ;打印大写转换。(for/list [(num (list-ref ch-test-list 2))(ch-t (list-ref ch-test-list 1))](if (equal? (number->chinese num #:style 'capitalization) ch-t)(format "~a->~a\n" num ch-t)(format "错误!~a预期生成~a,实际生成~a\n"num ch-t (number->chinese num #:style 'capitalization)))))

四、测试中文数字转阿拉伯数字

同上。

;测试中文转数字:
(display ;打印简体转换。(for/list [(ch (list-ref ch-test-list 0))(num (list-ref ch-test-list 2))](if (= (chinese->number ch) num)(format "~a->~a\n" ch num)(format "错误!~a预期结果为~a,实际结果为~a。\n"ch num (chinese->number ch)))))
(display ;打印大写转换。(for/list [(ch-t (list-ref ch-test-list 1))(num (list-ref ch-test-list 2))](if (= (chinese->number ch-t #:style 'capitalization) num)(format "~a->~a\n" ch-t num)(format "错误!~a预期结果为~a,实际结果为~a。\n"ch-t num (chinese->number ch-t #:style 'capitalization)))))

五、全部源程序

#lang racket
(require "number-chinese.rkt""chinese-number.rkt")(define ch-test-list'(("零" "一" "二" "三" "四" "五" "六" "七" "八" "九" "一十" "一十一" "一百一十" "一百一十一" "一百" "一百零二" "一千零二十" "一千零一" "一千零一十五" "一千" "一万" "二万零一十" "二万零一" "一十万" "一百万" "一千万" "一亿" "一十亿" "一十亿一千" "一十亿零一百" "二十万零一十" "二百万零一百零五" "二千万一千零七" "二十亿零一十万零一百九十" "一十亿四千零一万" "二亿零一万二千三百零一" "二十亿零五百零一万零一十" "四十亿零九百零六万零二百" "四十二亿九千四百九十六万七千二百九十五" "一千二百三十四兆五千零六万七千八百九十亿零一百二十三万四千零六十九" "五十八兆四千三百六十万二千八百九十亿零二百四十八万一千二百三十四兆五千零六万七千八百九十亿零一百二十三万四千零六十九")("零" "壹" "贰" "叁" "肆" "伍" "陆" "柒" "捌" "玖" "壹拾" "壹拾壹" "壹佰壹拾" "壹佰壹拾壹" "壹佰" "壹佰零贰" "壹仟零贰拾" "壹仟零壹" "壹仟零壹拾伍" "壹仟" "壹万" "贰万零壹拾" "贰万零壹" "壹拾万" "壹佰万" "壹仟万" "壹亿" "壹拾亿" "壹拾亿壹仟" "壹拾亿零壹佰" "贰拾万零壹拾" "贰佰万零壹佰零伍" "贰仟万壹仟零柒" "贰拾亿零壹拾万零壹佰玖拾" "壹拾亿肆仟零壹万" "贰亿零壹万贰仟叁佰零壹" "贰拾亿零伍佰零壹万零壹拾" "肆拾亿零玖佰零陆万零贰佰" "肆拾贰亿玖仟肆佰玖拾陆万柒仟贰佰玖拾伍" "壹仟贰佰叁拾肆兆伍仟零陆万柒仟捌佰玖拾亿零壹佰贰拾叁万肆仟零陆拾玖" "伍拾捌兆肆仟叁佰陆拾万贰仟捌佰玖拾亿零贰佰肆拾捌万壹仟贰佰叁拾肆兆伍仟零陆万柒仟捌佰玖拾亿零壹佰贰拾叁万肆仟零陆拾玖")(0 1 2 3 4 5 6 7 8 9 10 11 110 111 100 102 1020 1001 1015 1000 10000 20010 20001 100000 1000000 10000000 100000000 1000000000 1000001000 1000000100 200010 2000105 20001007 2000100190 1040010000 200012301 2005010010 4009060200 4294967295 12345006789001234069 5843602890024812345006789001234069)));测试数字转中文:
(display ;打印简体转换。(for/list [(num (list-ref ch-test-list 2))(ch (list-ref ch-test-list 0))](if (equal? (number->chinese num) ch)(format "~a->~a\n" num ch)(format "错误!~a预期生成~a,实际生成~a\n"num ch (number->chinese num)))))
(display ;打印大写转换。(for/list [(num (list-ref ch-test-list 2))(ch-t (list-ref ch-test-list 1))](if (equal? (number->chinese num #:style 'capitalization) ch-t)(format "~a->~a\n" num ch-t)(format "错误!~a预期生成~a,实际生成~a\n"num ch-t (number->chinese num #:style 'capitalization)))));测试中文转数字:
(display ;打印简体转换。(for/list [(ch (list-ref ch-test-list 0))(num (list-ref ch-test-list 2))](if (= (chinese->number ch) num)(format "~a->~a\n" ch num)(format "错误!~a预期结果为~a,实际结果为~a。\n"ch num (chinese->number ch)))))
(display ;打印大写转换。(for/list [(ch-t (list-ref ch-test-list 1))(num (list-ref ch-test-list 2))](if (= (chinese->number ch-t #:style 'capitalization) num)(format "~a->~a\n" ch-t num)(format "错误!~a预期结果为~a,实际结果为~a。\n"ch-t num (chinese->number ch-t #:style 'capitalization)))))

通过打印出的测试结果,全部通过。

Racket实现数字与中文的转换算法三(程序测试)相关推荐

  1. mysql 中文数字转换_数据库中数字和中文的转换问题

    public class DaoUtil{ /** * 系统字典表 * 适用于列表循环时,根据编码获取汉字 * @param appdicid * @return */ public static H ...

  2. 阿拉伯数字与中文数字转换算法

    根据<算法的乐趣>简单总结一下: 中文数字的特点 中文数字直接"数字+权位"的方式组成数字,比如阿拉伯数字100,中文表示为一百,其中"一"为数字, ...

  3. python 转换数字为中文的大写

    python 转换数字为中文的大写 python 转换为中文的大写数字,比较简单,有需要的同学可以拿去使用,没做角和分 可以自己修改 下面为代码 #-*-coding:utf-8 -*- import ...

  4. python中如何将数字转换成中文数字_Python把数字变成中文的方法

    Python把数字变成中文的方法 发布时间:2020-07-07 15:05:45 来源:亿速云 阅读:92 作者:清晨 这篇文章将为大家详细讲解有关Python把数字变成中文的方法,小编觉得挺实用的 ...

  5. 数字与中文大写数字互转(5千万亿亿亿亿以上的数字也支持转换)

    来源是看到知乎上一个奇葩问题: 任意大小的数字字符串转中文 其实10万以内的整数转换大写也太简单,今天我们要实现的是任意大小的数字字符串转大写. 首先我们要保证4位数以内的转换函数,能够处理各种含&q ...

  6. php人民币转换,人民币数字转中文币制

    [php]代码库/** * 人民币数字转中文币制 * @param string $data 待转换的数字 * @return string 返回转换后的中文数字 */ function number ...

  7. python里面如何将数字转换成中文的形式_Python怎么把数字变成中文?

    python将数字转换为中文的方法: 在字典中设置0-9为键,值为数字对应的中文,转换数字时获取字典中指定键对应的值即可.dict1={'0': '零', '1': '一', '2': '二', '3 ...

  8. 词向量算法—【AAAI2018】蚂蚁金服公开的基于笔画的中文词向量算法

    词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机器翻译等诸多任务中都发挥了重要作用.词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里.该算法也经历了不断的改进, ...

  9. 阿拉伯数字转换成中文读法的C语言程序

    记一道评论区的题目 ​ 导语 : 作为一个西电的菜鸡 , 每天只能和不超过两天的ddl较劲 , 啥也不懂 , 啥也不会. 因为家里硬盘不太够了所以把作业的代码传到博客里保存. 可以预见到的 , 遭到了 ...

最新文章

  1. EEG vs MRI vs fMRI vs fNIRS简介
  2. 在eclipse使用git管理项目工程代码
  3. mac instantclient_12_2 安装配置
  4. Gridview SummaryItem 格式化数字
  5. selenium 简介
  6. Python由浅入深编程(概念)实战
  7. [转]rails常用验证方法
  8. chrome插件开发(Demo案例)
  9. RMAN传输表空间迁移数据
  10. 私有网盘搭建——Ubuntu使用宝塔面板安装Nextcloud及优化 ------超详细
  11. 普通人如何像天才一样快速学习?
  12. 最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
  13. 关于数据存储引擎结构,没有比这篇更详细的
  14. liferay开发环境搭建
  15. 跟我做WinForm开发(2)-后台逻辑操作
  16. bzoj2754:[SCOI2012]喵星球上的点名 (后缀数组+离线+树状数组)
  17. 博客内插入bilibili视频
  18. Ubuntu下的图像编辑软件
  19. 【DXR/RayTracingGems】屏幕空间光子映射Screen-Space PM(SSPM)
  20. 如何将eclipse设置全黑背景!

热门文章

  1. YMatrix 番外篇|透过镜头,那些不为人知的故事
  2. 3mdax插件开发之环境配置(3dmax2018SDK +VS2017 +win10)详细步骤
  3. Fatal signal 11问题的解决方法
  4. 使用cocoscreator接入google AdSence广告
  5. linux 服务器 ssd,关于linux:搭载固态硬盘的服务器究竟比机械硬盘快多少
  6. 优秀产品经理所需具备的7种能力
  7. PTX-PEG-TCO 紫杉醇-聚乙二醇-反式环辛烯
  8. android wms 窗口,Android6.0 WMS(十一) WMS窗口动画生成及播放
  9. 机器学习深度学习加强学习_我如何在9个月内学习深度学习
  10. 图像处理-图像金字塔