1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 将数字金额转换为对应的中文大写金额

将数字金额转换为对应的中文大写金额

时间:2024-01-23 05:06:03

相关推荐

将数字金额转换为对应的中文大写金额

一个小问题,将指定的数字金额转换输出为对应的中文大写金额,比如:对于数字金额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:测试案例只是部分,可能测试不充分,欢迎讨论!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。