Python项目实战:数字转人民币读法
本节实现在实际开发中常用的一个工具函数:将一个浮点数转换成人民币读法的字符串,这个程序需要使用数组。
实现这个函数的思路是,首先把这个浮点数分成整数部分和小数部分。提取整数部分很容易,直接将这个浮点数强制类型转换成一个整数即可,这个整数就是浮点数的整数部分;再使用浮点数减去整数就可以得到这个浮点数的小数部分。
然后分开处理整数部分和小数部分。小数部分的处理比较简单,直接截断保留 2 位数字,转换成几角几分的字符串。整数部分的处理则稍微复杂一点,但只要认真分析不难发现,中国的数字习惯是 4 位一节的,一个 4 位的数字可被转成几千几百几十几,至于后面添加什么单位则不确定:
实现这个函数的思路是,首先把这个浮点数分成整数部分和小数部分。提取整数部分很容易,直接将这个浮点数强制类型转换成一个整数即可,这个整数就是浮点数的整数部分;再使用浮点数减去整数就可以得到这个浮点数的小数部分。
然后分开处理整数部分和小数部分。小数部分的处理比较简单,直接截断保留 2 位数字,转换成几角几分的字符串。整数部分的处理则稍微复杂一点,但只要认真分析不难发现,中国的数字习惯是 4 位一节的,一个 4 位的数字可被转成几千几百几十几,至于后面添加什么单位则不确定:
- 如果这节 4 位数字出现在 1~4 位,则后面添加单位“元”;
- 如果这节 4 位数字出现在 5~8 位,则后面添加单位“万”;
- 如果这节 4 位数字出现在 9~12 位,则后面添加单位“亿”;
多于 12 位就暂不考虑了。
因此,实现这个程序的关键就是把一个 4 位的数字字符串转换成中文读法。下面程序把这个需求实现了一部分:
'''
把一个浮点数分解成整数部分和小数部分字符串
num 需要被分解的浮点数
返回分解出来的整数部分和小数部分。
第一个数组元素是整数部分,第二个数组元素是小数部分
'''
def divide(num):
# 将一个浮点数强制类型转换为int型,即得到它的整数部分
integer = int(num)
# 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
fraction = round((num - integer) * 100)
# 下面把整数转换为字符串
return (str(integer), str(fraction))
han_list = ["零" , "壹" , "贰" , "叁" , "肆" ,\
"伍" , "陆" , "柒" , "捌" , "玖"]
unit_list = ["十" , "百" , "千"]
'''
把一个四位的数字字符串变成汉字字符串
num_str 需要被转换的四位的数字字符串
返回四位的数字字符串被转换成汉字字符串
'''
def four_to_hanstr(num_str):
result = ""
num_len = len(num_str)
# 依次遍历数字字符串的每一位数字
for i in range(num_len) :
# 把字符串转成数值
num = int(num_str[i])
# 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
if i != num_len - 1 and num != 0 :
result += han_list[num] + unit_list[num_len - 2 - i]
# 否则不要添加单位
else :
result += han_list[num]
return result
'''
把数字字符串变成汉字字符串
num_str 需要被转换的数字字符串
返回数字字符串被转换成汉字字符串
'''
def integer_to_str(num_str):
str_len = len(num_str)
if str_len > 12 :
print('数字太大,翻译不了')
return
# 如果大于8位,包含单位亿
elif str_len > 8:
return four_to_hanstr(num_str[:-8]) + "亿" + \
four_to_hanstr(num_str[-8: -4]) + "万" + \
four_to_hanstr(num_str[-4:])
# 如果大于4位,包含单位万
elif str_len > 4:
return four_to_hanstr(num_str[:-4]) + "万" + \
four_to_hanstr(num_str[-4:])
else:
return four_to_hanstr(num_str)
num = float(input("请输入一个浮点数: "))
# 测试把一个浮点数分解成整数部分和小数部分
integer, fraction = divide(num)
# 测试把一个四位的数字字符串变成汉字字符串
print(integer_to_str(integer))
print(fraction)
运行上面程序,将看到如下运行结果:
请输入一个浮点数: 361092004.456
叁亿陆千壹百零玖万贰千零零肆
46
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频