国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Python中基于字典的大寫金額轉(zhuǎn)換算法的實現(xiàn)

2022-04-08 08:29:14婁七明許海成孫建洪
紅河學院學報 2022年2期
關(guān)鍵詞:阿拉伯數(shù)字大寫字典

婁七明,許海成,孫建洪

(紅河學院工學院,云南蒙自 661199)

Python是一種跨平臺的面向?qū)ο蟮哪_本語言,廣泛用于Web開發(fā)、云計算、人工智能、金融分析、科學計算等領(lǐng)域。隨著信息化建設(shè)的不斷推進,辦公自動化程度的不斷提高,日常工作中很多票據(jù)和經(jīng)濟合同等都需要打印。這些票據(jù)和經(jīng)濟合同中通常涉及到大寫金額,這就需要將用阿拉伯數(shù)字表示的金額轉(zhuǎn)換成人民幣大寫形式。相關(guān)文獻[1][2]實現(xiàn)了基于C#、T-SQL等語言的大寫金額轉(zhuǎn)換算法,這些算法中把阿拉伯數(shù)字轉(zhuǎn)換成對應(yīng)的大寫漢字都是使用多分支結(jié)構(gòu)實現(xiàn)的。為此,本文提出了一種基于字典的大寫金額轉(zhuǎn)換方法,并用Python實現(xiàn)了該算法。該算法簡單易懂,具有很好的可擴充性和較強的通用性。

1 算法設(shè)計

1.1 大寫金額的書寫規(guī)則[1][3]

要把阿拉伯數(shù)字轉(zhuǎn)換成用漢字表示的大寫金額,可以把整數(shù)部分和小數(shù)部分分開進行轉(zhuǎn)換,然后把轉(zhuǎn)換結(jié)果合并成一個字符串。整數(shù)部分的轉(zhuǎn)換規(guī)則如下:

(1)非零數(shù)字轉(zhuǎn)換成對應(yīng)的漢字并加上相應(yīng)數(shù)位對應(yīng)的單位,比如4310轉(zhuǎn)換為“肆仟叁佰壹拾圓”;

(2)億位不為零時,億位要加上“億”;萬位不為零時,萬位要加上“萬”;

(3)非0的阿拉伯數(shù)字之間出現(xiàn)一個或者多個0時,大寫金額中間對應(yīng)處要加一個“零”;如果非0的阿拉伯數(shù)字之后所有數(shù)字都為0,則大寫金額中這個數(shù)字后面不加“零”,比如10100,轉(zhuǎn)換為“壹萬零壹佰圓”。

小數(shù)部分的轉(zhuǎn)換規(guī)則如下:

(1)小數(shù)部分為0,轉(zhuǎn)換為“整”或“正”;

(2)角位為0,分位不為0,轉(zhuǎn)換為“零*分”,*代表分位數(shù)字對應(yīng)的漢字;

(3)角位為不為0,分位為0,轉(zhuǎn)換為“*角”,*代表角位數(shù)字對應(yīng)的漢字;

(4)角位和分位都不為0,轉(zhuǎn)換為“*角*分”,*代表相應(yīng)數(shù)字對應(yīng)的漢字。

1.2 算法設(shè)計

為了簡化算法,分別取出要轉(zhuǎn)換的阿拉伯數(shù)字的整數(shù)部分和小數(shù)部分。然后把整數(shù)部分和小數(shù)部分按照前面給出的轉(zhuǎn)換規(guī)則分別轉(zhuǎn)換成對應(yīng)的字符串,然后把整數(shù)部分對應(yīng)的字符串與小數(shù)部分對應(yīng)的字符串進行合并即可。比如待轉(zhuǎn)換的數(shù)字是450210.35,取出整數(shù)部分為450210,根據(jù)整數(shù)部分的轉(zhuǎn)換規(guī)則得“肆拾伍萬零貳佰壹拾圓”,小數(shù)部分為35,根據(jù)小數(shù)部分的轉(zhuǎn)換規(guī)則得“叁角伍分”,合并后的轉(zhuǎn)換結(jié)果為“肆拾伍萬零貳佰壹拾圓叁角伍分”。

金額轉(zhuǎn)換算法對應(yīng)的N-S流程圖如圖1所示,其中圖a為算法的總體流程圖,圖b為小數(shù)部分轉(zhuǎn)換

圖1 金額轉(zhuǎn)換算法流程圖

2 算法實現(xiàn)

2.1 關(guān)鍵技術(shù)

字典[4]是Python中的一種數(shù)據(jù)類型,是一種可變?nèi)萜髂P?,且可存儲任意類型對象。字典類型可以理解為一種映射關(guān)系,映射是一種鍵和值的對應(yīng)關(guān)系,比如1:“壹”,鍵“1”對應(yīng)的值是“壹”。字典就是鍵值對的集合,通過鍵獲得對應(yīng)的值。Python中字典的聲明,以及通過鍵獲得值的方式如下。

例如,下面定義了一個字典,字典dictArab2Chinese定義了阿拉伯數(shù)字和大寫漢字的映射關(guān)系。

有了這個字典要把3 2 1 轉(zhuǎn)換成對應(yīng)的漢字形式,只需要分別取鍵3、2、1 對應(yīng)的值“叁”“貳”“壹”,然后連接成一個字符串即可,結(jié)果為“叁貳壹”。下面的算法中就巧妙地使用了字典將阿拉伯數(shù)字轉(zhuǎn)換成對應(yīng)的漢字并在后面加上數(shù)字所在位對應(yīng)的單位來實現(xiàn)大寫金額的轉(zhuǎn)換。

2.2 算法的實現(xiàn)

函數(shù)名稱:Arab2Chinese。

參數(shù):totalPrice數(shù)值類型,待轉(zhuǎn)換的金額。

返回值:result字符串類型,符合漢語書寫規(guī)范的大寫金額。

函數(shù)的定義如下:

上述代碼把待轉(zhuǎn)換的數(shù)字450210.35轉(zhuǎn)換為對應(yīng)的大寫金額并輸出,輸出結(jié)果為“肆拾伍萬零貳佰壹拾圓叁角伍分”。

3 結(jié)語

本文采用Python實現(xiàn)的基于字典的大寫金額轉(zhuǎn)換算法簡單易懂。文中定義的轉(zhuǎn)換函數(shù)Arab2Chinese能實現(xiàn)千億以內(nèi)的阿拉伯數(shù)字到大寫金額的轉(zhuǎn)換,能滿足大多數(shù)情況下金額轉(zhuǎn)換的需求。如果待轉(zhuǎn)換的阿拉伯數(shù)字超出仟億位,只需要修改函數(shù)體中第二行定義的數(shù)位字典dictUnit2Chinese,在字典中增加更高數(shù)位的鍵值對即可,比如修改為dictUnit2Chinese={0:u'',1:u'拾',2:u'佰',3:u'仟',4:u'',5:u'拾',6:u'佰',7:u'仟',8:u'',9:u'拾',10:u'佰',11:u'仟',12:u’萬’},該算法就能實現(xiàn)萬億以內(nèi)的金額轉(zhuǎn)換,該算法具有很好的可擴充性和通用性。

猜你喜歡
阿拉伯數(shù)字大寫字典
開心字典
家教世界(2023年28期)2023-11-14 10:13:50
開心字典
家教世界(2023年25期)2023-10-09 02:11:56
做一個大寫的“我”
少先隊活動(2022年4期)2022-06-06 07:20:20
大寫的厲害:“00后”少年自制火箭成功上天
小讀者(2021年4期)2021-06-11 05:42:04
阿拉伯數(shù)字的用法
“大寫”與“大些”
找影子
我是小字典
正版字典
讀者(2016年14期)2016-06-29 17:25:50
阿拉伯數(shù)字是阿拉伯人發(fā)明的嗎
宜黄县| 特克斯县| 黄浦区| 邯郸市| 扶绥县| 依安县| 保定市| 郴州市| 东乡族自治县| 富宁县| 广平县| 东安县| 乌什县| 襄汾县| 徐水县| 九龙城区| 元江| 谢通门县| 南涧| 曲周县| 民乐县| 安岳县| 漳浦县| 怀仁县| 惠水县| 全椒县| 迁安市| 龙山县| 博野县| 仁化县| 义马市| 精河县| 上高县| 凌源市| 遂宁市| 麦盖提县| 三门县| 巩义市| 普宁市| 巴塘县| 佛山市|