一个小问题,将指定的数字金额转换输出为对应的中文大写金额,比如:对于数字金额123,输出:壹佰贰拾叁圆

讨论之前,我们约定,数字最大不超过9999999999999.99,且最多只有两位小数。

问题不难,主要需考虑以下几点:

  • 阿拉伯数字转换为对应的中文大写,比如,对于阿拉伯数字1,对应输出

  • 每个位置的数字后紧跟正确的单位,比如对于从右向左的第三位(不包含小数点),如果当前数字不为零,则需体现出的概念

  • 连续的数字0不能输出多个,这是不符合日常习惯的

对于前两点,我们可以使用Python中的dict类型来实现关系的转换,比如,数字转换字典定义如下:

c_d = {'0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖'}

单位字典定义如下,字典中的key是数字中单位的坐标索引:

d_d = {0: '分', 1: '角', 2: '圆', 3: '拾', 4: '佰', 5: '仟', 6: '万', 7: '拾', 8: '佰', 9: '仟', 10: '亿', 11: '拾', 12: '佰',13: '仟',14: '万'}

对于第三点,我们需要定义一个临时变量,记录前一个位置的数字是否为零,这样,我们就可以同时结合当前位置的数字来决定是否输出

完整代码如下:

def to_currency(number):if not isinstance(number, float) and not isinstance(number, int):return 'non number'if number < 0 or number > 9999999999999.99:return 'wrong number'if number == 0:return '零圆'c_d = {'0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖'}d_d = {0: '分', 1: '角', 2: '圆', 3: '拾', 4: '佰', 5: '仟', 6: '万', 7: '拾', 8: '佰', 9: '仟', 10: '亿', 11: '拾', 12: '佰',13: '仟',14: '万'}L = []pre = '0's = str(int(number * 100))[::-1].replace('.', '')index = -1for c in s:index += 1if c == '0' and pre == '0':if index == 2:L.insert(0, '圆')elif c == '0':if index == 2:L.insert(0, '圆')else:L.insert(0, '零')pre = celse:L.insert(0, c_d[c] + "" + d_d[index])pre = creturn ''.join(L)

测试代码如下:

if __name__ == '__main__':print(to_currency(123))print(to_currency(14001))print(to_currency(9999999999999))print(to_currency(92830))print(to_currency(92800))print(to_currency(92800.89))print(to_currency(92800.09))print(to_currency(92800.98))print(to_currency(92800.08))print(to_currency(92800.90))print(to_currency(900008.90))print(to_currency(0.90))print(to_currency(1.90))print(to_currency(192.33))print(to_currency(0))print(to_currency(1))print(to_currency(10))print(to_currency(100))print(to_currency(1000))

输出结果:

壹佰贰拾叁圆
壹万肆仟零壹圆
玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖圆
玖万贰仟捌佰叁拾圆
玖万贰仟捌佰圆
玖万贰仟捌佰圆捌角玖分
玖万贰仟捌佰圆零玖分
玖万贰仟捌佰圆玖角捌分
玖万贰仟捌佰圆零捌分
玖万贰仟捌佰圆玖角
玖拾零捌圆玖角
玖角
壹圆玖角
壹佰玖拾贰圆叁角叁分
零圆
壹圆
壹拾圆
壹佰圆
壹仟圆

PS:测试案例只是部分,可能测试不充分,欢迎讨论!

将数字金额转换为对应的中文大写金额相关推荐

  1. 【Java】将数字金额转换为大写中文金额

    package com.ruoyi.test;import org.apache.commons.lang3.StringUtils;/*** @Title: ConvertUpMoney* @Des ...

  2. JQuery 数字金额转换为大写金额

    web JQuery 数字金额转换为大写金额 网址:https://blog.csdn.net/qq_36894527/article/details/80675658 function Arabia ...

  3. 数字金额转换为大写人民币汉字

    // 数字金额转换为大写人民币汉字convertCurrency (money) {// 汉字的数字var cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ' ...

  4. JS将数字金额转换为大写人民币汉字

    转载自 qubernet 博客 JS将数字金额转换为大写人民币汉字 function convertCurrency(money) {//汉字的数字var cnNums = new Array('零' ...

  5. python数字金额转换为中文大写金额(角、分)

    初学python,有错望大佬改正,谢谢 编写程序,根据用户输入的金额数字转换成相应的中文大写数字.例如,1002.34转换为"壹仟零贰圆叁角肆分",100转换为"壹佰圆整 ...

  6. 将数字金额转换为中文大写金额

    /*------Oracle数据库------*/                                       在存储过程中,将数据中的金额小写转大写的函数. create or re ...

  7. java将输入的数字金额转换为中文大写金额

    前言 将输入的数字字符串中的每一个数字字符转换为对应的中文大写,例如12345转换为壹贰叁肆伍,再将此中文大写和对应的单位进行字符串的拼接并一起输出 输出结果为:零佰零拾壹万贰仟叁佰肆拾伍元 一.具体 ...

  8. 将数字金额转换为中文大写金额(在网上找的)

    /*------Oracle数据库------*/                                       在存储过程中,将数据中的金额小写转大写的函数. create or re ...

  9. Java 描述将数字金额转换为中文大写

    Java 描述金额转换(数字转换成中文大写)         解题思路:把每一位转换成对应的大写,然后在不足地方补零,最后加上相应单位. 代码如下: import java.util.Scanner; ...

  10. JS将数字金额转换为中文大写

    最近在做一个关于金额的票据显示,有部分需要将数字金额改为中文大写金额,下面给出具体实现的JS var changeMoney = function(n) {var fraction = ['角', ' ...

最新文章

  1. [2017.02.23] Java8 函数式编程
  2. 山东财经大学python实验六答案_实验六(带答案)
  3. 新手学java_新手如何学习Java
  4. leetcode330. 按要求补齐数组 顶级难度玄学贪心
  5. mysql 删除表记录的 存储过程命令_用SQL语句删除一个数据库的所有表和所有存储过程...
  6. Ubuntu图形化数据库连接工具
  7. 共享打印机无法连接的解决办法
  8. 【华为机试题 HJ91】走方格的方案数
  9. Element UI-动态合并表格行
  10. 自媒体人必备16种工具大全,这些工具你值得拥有干货
  11. The path to the Subversion executable is probably wrong. Fix it.
  12. 继续教育计算机考试试题,第四批继续教育计算机考试试题.doc
  13. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)
  14. linux根文件系统目录结构
  15. SysML图例-核聚变
  16. 上海体育学院计算机课时,我国体育教育训练学专业硕士研究生课程的设置
  17. Python基础与大数据应用章末小结(一)
  18. 一文读懂CAN总线/LIN总线/FlexRay/以太网
  19. 电机与拖动(1)直流电机
  20. 高清电子警察和高清卡口的区别

热门文章

  1. html表格固定右侧列,jQuery锁定表头和固定列插件FixedTable
  2. Java静态代理、动态代理
  3. SENSOR DVP接口介绍
  4. java list随机取_java list随机抽取元素的案例
  5. 中国行政区域经纬度(免费下载)
  6. 绿城中国的数字化转型之大中台实践
  7. 系统集成项目管理之何为系统集成
  8. 任务型聊天机器人和闲聊类机器人的关键技术
  9. 【愚公系列】2022年02月 Django商城项目 26-搜索引擎功能实现
  10. 负载均衡与分布式网络存储技术简介