Python專案實戰 數字轉人民幣讀法

2021-09-24 23:17:13 字數 2283 閱讀 2347

本節實現在實際開發中常用的乙個工具函式:將乙個浮點數轉換**民幣讀法的字串,這個程式需要使用陣列。

實現這個函式的思路是,首先把這個浮點數分成整數部分和小數部分。提取整數部分很容易,直接將這個浮點數強制型別轉換成乙個整數即可,這個整數就是浮點數的整數部分;再使用浮點數減去整數就可以得到這個浮點數的小數部分。

然後分開處理整數部分和小數部分。小數部分的處理比較簡單,直接截斷保留 2 位數字,轉換成幾角幾分的字串。整數部分的處理則稍微複雜一點,但只要認真分析不難發現,中國的數字習慣是 4 位一節的,乙個 4 位的數字可被轉成幾千幾百幾十幾,至於後面新增什麼單位則不確定:

多於 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從上面程式的執行結果來看,初步實現了所需功能,但這個程式並不是這麼簡單的,對零的處理比較複雜。例如,有兩個零連在一起時該如何處理呢?還有小數部分如何翻譯?因此,這個程式還需要繼續完善,有興趣的讀者可自行完善此程式。

python 數字轉人民幣讀法

把乙個浮點數分解成整數和小數部分字串 num是需要被分解的浮點數 返回分解出來的整數和小數部分 第乙個陣列元素是整數部分,第二個數字元素是小數部分 def divide num 將乙個浮點數強制轉換成int型別,即得到他的整數部分 integer int num 浮點數減去整數部分,得到小數部分,小...

數字轉人民幣

數字轉換人民幣大寫形式 銀行 單位和個人填寫的各種票據和結算憑證需要將數字金額寫 民幣大寫形式,它的規則主要有以下幾條 1 數字和單位使用壹 貳 叄 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬 億 元 角 分 零 整等字樣,不能使用其他漢字 2 中文大寫金額數字到 元 為止的,在 元 之後 應寫 整 字...

瘋狂Python講義Unit4 數字轉人民幣讀法

usr bin python3 num transfer to rmb 借鑑了講義中4位的數字字串轉換成中文的函式 優化了小數部分和0的處理,仍舊不夠完善 分離整數和小數部分 def divide num inttemp int num fractiontemp round num inttemp ...