大家好,我是皮皮。
一、前言
前幾天在Python黃金群【莫生氣】問了一個Python
數(shù)據(jù)處理的問題,需求如下:
大佬們,請教一個問題,2274587.84如何快速的轉(zhuǎn)換為大寫:貳佰貳拾柒萬肆仟伍佰捌拾柒元捌角肆分?有沒有工具或者網(wǎng)頁啥的?不一定要Python實現(xiàn)。
使用百度上查到的代碼,似乎不太好用,
def num2chinese(num):
chinese_num = ["零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖"]
chinese_unit = ["", "拾", "佰", "仟", "萬", "億"]
num_str = str(num)
num_len = len(num_str)
chinese_str = ''
zero_flag = False
for i in range(num_len):
j = int(num_str[i])
if i == 8:
zero_flag = True
else:
if zero_flag:
chinese_str += chinese_num[0]
zero_flag = False
chinese_str += chinese_num[j] + chinese_unit[num_len - i - 1]
if zero_flag:
chinese_str += chinese_num[0]
return chinese_str
if __name__ == '__main__':
print(num2chinese(135496))
代碼運行之后出錯,和實際預期的結(jié)果還是有差距的。

而且一旦假如小數(shù),比方說有角分這樣的,直接報錯了。

二、實現(xiàn)過程
后來在訊飛星火上問到了一個答案,代碼如下所示:
def num_to_chinese(num):
chinese_num = {
0: "零",
1: "一",
2: "二",
3: "三",
4: "四",
5: "五",
6: "六",
7: "七",
8: "八",
9: "九"
}
chinese_unit = ["", "十", "百", "千", "萬", "億"]
chinese_str = ""
unit_index = 0
for i in str(num):
if i.isdigit():
chinese_str += chinese_num[int(i)] + chinese_unit[unit_index]
unit_index += 1
else:
chinese_str += i
return chinese_str.strip("零") or "零"
num = 2274587.84
result = num_to_chinese(num)
print(result)
代碼花里胡哨的,但是解決不了問題,一跑就出現(xiàn)數(shù)組越界的錯誤,嘗試調(diào)教,說他錯了,他仍然給你舊代碼,甚至還給你一個不沾邊的代碼,整無語了。
后來問了Zelinna,給的代碼看上去像那么回事,代碼如下:
這個需求可以使用Python的數(shù)字轉(zhuǎn)中文工具——`chinese_converter`來實現(xiàn),以下是用Python代碼實現(xiàn)這個功能的示例。
```python
# 首先需要安裝 chinese_converter 包,運行以下指令即可
# pip install chinese_converter
from chinese_converter import num_to_chinese
num = 2274587.84
num_str = str(int(num)) # 轉(zhuǎn)換為整型并轉(zhuǎn)換為字符串
num_chinese_upper = num_to_chinese(num_str, False, True) + '元' # 轉(zhuǎn)換為大寫并加上“元”
# 去掉無效小數(shù)位
decimal = round(num - int(num), 2) # 取小數(shù)位并保留兩位
if decimal > 0:
decimal_str = str(decimal)[2:]
# 轉(zhuǎn)換小數(shù)部分的數(shù)字
for i, d in enumerate(decimal_str):
num_chinese_upper += num_to_chinese(int(d)) + ('角' if i == 0 else '分')
print(num_chinese_upper)
# 輸出結(jié)果為:貳佰貳拾柒萬肆仟五佰八拾七元捌角四分。
# 運行成功可以將任意數(shù)字轉(zhuǎn)為大寫中文數(shù)字。如果你在開發(fā)中需要經(jīng)常進行數(shù)字和中文之間的轉(zhuǎn)換,這個工具可以提高你的工作效率。
不過安裝這個庫之后,竟然報錯,說里邊對應(yīng)的方法竟然不存在,這。。。很尷尬,還占用我內(nèi)存,反手就uninstall掉了。
最后用了Excel設(shè)置單元格格式,好家伙,找到數(shù)據(jù),然后右鍵-->設(shè)置單元格格式-->特殊-->人民幣大寫,就完事了,而且多行數(shù)據(jù)的話,直接一個填充就完事了,比問C老師,Z老師,K老師快得多!

順利地解決了粉絲的問題。
后來【甯同學】,還給了一個方法。搜狗輸入法,輸入v+數(shù)字直接就是了。

三、總結(jié)
大家好,我是皮皮。這篇文章主要盤點了一個Python
實戰(zhàn)的問題,文中針對該問題,給出了具體的解析和代碼實現(xiàn),幫助粉絲順利解決了問題。
最后感謝粉絲【莫生氣】提問,感謝【巭孬嫑勥烎】給出的思路和代碼解析,感謝【Ineverleft】、【瑜亮老師】等人參與學習交流。
【提問補充】溫馨提示,大家在群里提問的時候??梢宰⒁庀旅鎺c:如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點demo數(shù)據(jù)來(小文件的意思),然后貼點代碼(可以復制的那種),記得發(fā)報錯截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過50行這樣的話,發(fā)個.py文件就行。
