Python 將中文大寫數字轉為阿拉伯數字

2021-09-29 05:24:39 字數 2912 閱讀 7204

平時會碰到把中文大寫的金額轉為阿拉伯數字,比如叄仟伍佰陸拾玖元肆角需要轉為3569.4,嘗試編寫函式如下:

def

convert_***igit

(***)

: cn_num =

cn_unit =

regex = re.

compile

(r'[〇一二三四五六七**零壹貳叄肆伍陸柒捌玖貮兩十拾百佰千仟萬萬億億兆元角分]+'

) *** = regex.search(***)

if ***:

*** = ***.group(

)else

:return

none

result =

0 result_list =

unit =

0 control =

0for i, d in

enumerate

(***)

:if d in

'零百佰千仟萬萬億億兆〇'

and i ==0:

return

'大寫數字格式有誤'

break

if d ==

'元':

continue

if d ==

'角':

result -= cn_num[***[i -1]

] result += cn_num[***[i -1]

]*0.1continue

if d ==

'分':

result -= cn_num[***[i -1]

] result += cn_num[***[i -1]

]*0.01

continue

if d in cn_num:

result += cn_num[d]

# 如果為單個數字直接賦值

elif d in cn_unit:

if unit ==0:

unit_1 = cn_unit[d]

# 這裡的處理主要是考慮到類似於二十三億五千萬這種數

if result ==0:

result = cn_unit[d]

else

: result *= cn_unit[d]

unit = cn_unit[d]

result_1 = result

elif unit > cn_unit[d]

: result -= cn_num[***[i -1]

] result += cn_num[***[i -1]

]* cn_unit[d]

unit = cn_unit[d]

elif unit <= cn_unit[d]:if

(cn_unit[d]

< unit_1)

and(

len(result_list)

== control)

: result =

(result - result_1)

* cn_unit[d]

control +=

1else

: result *= cn_unit[d]

unit = cn_unit[d]

iflen

(result_list)

== control:

unit_1 = unit

result_1 = result

# 處理二十三億五千萬和壹兆零六百二十三億五千五百萬五百這種數,及時截斷

else

:return

'出現了不能匹配的中文數字,請查驗'

break

# print('第{}步結果為{}單位為{}'.format(i + 1, result, unit))

# print(result_list)

# print(result)

# print(unit_1)

return

sum(result_list)

+ result

test_ =

['八'

,'十一'

,'一百二十三'

,'一千二百零三'

,'上交金額伍拾陸萬柒仟零肆角'

,'十萬零三千六百零九'

,'一百二十三萬四千五百六十七'

,'一千一百二十三萬四千五百六十七'

,'捌億柒仟零肆拾陸萬貳角捌分'

,'一百零二億五千零一萬零一千零三十八'

,'壹兆零六百二十三億五千五百萬五百零捌元叄角柒分'

]for d in test_:

result = convert_***igit(d)

print

(f'轉換為阿拉伯數字為'

)

上例測試輸出為:

八轉換為阿拉伯數字為8

十一轉換為阿拉伯數字為11

一百二十三轉換為阿拉伯數字為123

一千二百零三轉換為阿拉伯數字為1203

上交金額伍拾陸萬柒仟零肆角轉換為阿拉伯數字為567000.4

十萬零三千六百零九轉換為阿拉伯數字為103609

一百二十三萬四千五百六十七轉換為阿拉伯數字為1234567

一千一百二十三萬四千五百六十七轉換為阿拉伯數字為11234567

捌億柒仟零肆拾陸萬貳角捌分轉換為阿拉伯數字為870460000.28

一百零二億五千零一萬零一千零三十八轉換為阿拉伯數字為10250011038

壹兆零六百二十三億五千五百萬五百零捌元叄角柒分轉換為阿拉伯數字為1062355000508.37

數字金額轉為大寫金額

金額轉大寫 public class moneyconvertchinese string strlower null string strupart null string strupper null int itemp 0 保留兩位小數 123.489 123.49 123.4 123.4 lo...

php將金錢小寫數字轉為金錢大寫的方法

張存超php技術部落格 function change num num elseif len pointdigit 2 len pointdigit小數點後有幾位 else 無小數點 for i 0 i c i 處理整數部分 for j len pointdigit j 1 j 處理小數部分 chi...

數字金額轉為大寫金額 C

數字金額轉為大寫金額 c 複製 ie有效 列印關於 金額轉大寫 public class moneyconvertchinese string strlower null string strupart null string strupper null intitemp 0 保留兩位小數 123....