1 2 3 轉換成一百二十三,十萬位以內的轉換

2021-10-12 09:53:38 字數 3576 閱讀 1821

python 解法

# 將結尾的0 全部替換為#  比如 100  就是1## 但是 10100 則是101##

def getnoendzerostr(originstr):

noendstr = originstr.rstrip("0")

# 確實有被替換的0

hasendzerosize = len(originstr) - len(noendstr)

if (hasendzerosize > 0):

return noendstr + "#" * hasendzerosize

return noendstr

pass

def getnumberforstr(strnumber):

if (strnumber == "" or strnumber == none):

print("資料不能為空")

return

# 不能轉換為數字

if not strnumber.isnumeric():

print("資料格式不正確")

resbybyfloat = 0;

try:

resbybyfloat = float(strnumber)

except exception as ex:

# 列印錯誤並且返回

print('輸入的字串不能轉換位float error: ' + str(ex))

return

if strnumber.__contains__("."):

print("暫時不支援浮點運算")

return

if strnumber.__contains__("-") or strnumber.__contains__("——"):

print("暫時不支援負數運算")

return

dictbynumber = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]

dictbydigits = ["", "十", "百", "千", "萬"]

# 針對0做特殊處理

if resbybyfloat == 0:

return dictbynumber[0]

# 開頭如果為0的話 過濾掉

nostratzerostr = strnumber.lstrip("0")

# 將字串轉化為字串陣列

strnumberlist = list(nostratzerostr)

# 根據當前位數與字典位數對比

if len(strnumberlist) > len(dictbydigits):

print("資料太大了,暫時不支援")

return

# 根據數字大小擷取正確的順序

dictbydigits = dictbydigits[0:len(strnumberlist)]

dictbydigits.reverse()

# 過濾結尾的0 並用#字串代替

noendzerostr = getnoendzerostr(nostratzerostr)

# 過濾中間的0 如果是兩個0 就用1個0代替 10001 10**1

hasonecenter = noendzerostr.replace("0", "@")

resstr = ""

isaddcenterzero = false

# 核心邏輯 倒敘新增最後反轉字串

for index in range(len(strnumberlist)):

# 結尾是#號的代表 代表結尾是0 所以跳過

if (noendzerostr[index] == "#"):

continue

# 過濾中間的0

if (hasonecenter[index] == "@"):

# 後續如果不是數字 符號不要

if (not isaddcenterzero):

resstr += dictbynumber[int(strnumberlist[index])]

isaddcenterzero = true

continue

# 解決 10101

if (index > 0 and hasonecenter[index - 1] == "@" and hasonecenter[index] != "@"):

isaddcenterzero = false

resstr += dictbynumber[int(strnumberlist[index])] + dictbydigits[index]

pass

# 中間有連續多個零,只取乙個零

return resstr

def printres(strnumber):

res = getnumberforstr(strnumber)

print(strnumber + ":" + res)

def main():

for x in getcontainszeroandonenumber():

printres(str(x))

pass

# 拿到所有從0到9萬9千中包含0和1的數字

def getcontainszeroandonenumber():

list=

for x in range(99999 + 1):

strnumber = str(x)

if not strnumber.replace("0","").replace("1",""):

return list

if __name__ == '__main__':

main()

結果輸出

d:\devlop\python\python.exe d:/project/python/market/pic/main_number.py

0:零1:一

10:一十

11:一十一

100:一百

101:一百零一

110:一百一十

111:一百一十一

1000:一千

1001:一千零一

1010:一千零一十

1011:一千零一十一

1100:一千一百

1101:一千一百零一

1110:一千一百一十

1111:一千一百一十一

10000:一萬

10001:一萬零一

10010:一萬零一十

10011:一萬零一十一

10100:一萬零一百

10101:一萬零一百零一

10110:一萬零一百一十

10111:一萬零一百一十一

11000:一萬一千

11001:一萬一千零一

11010:一萬一千零一十

11011:一萬一千零一十一

11100:一萬一千一百

11101:一萬一千一百零一

11110:一萬一千一百一十

11111:一萬一千一百一十一

process finished with exit code 0

將0 06轉換成6

numberformat num numberformat.getpercentinstance 返回當前預設語言環境的百分比格式。num.setmaximumintegerdigits 2 設定數的整數部分所允許的最大位數 num.setmaximumfractiondigits 2 設定數的小數...

10 轉換成為整數

使用內建函式 int 將資料轉換成整數 a 10 b int a 將字串變數 a int轉換成整數 print a str print b int print a 1 錯誤 print b 1 10 1 如果字串不是乙個合法的數字會出錯 a hello b int a print b 錯誤 x 1a...

ISO8601轉換成Date型別

2016 12 30t00 00 00.000 08 00,這是個什麼東西我開始的時候也不知道,相信大家也遇見過,這是一種時間格式叫做iso8601。這種的東西據說有很多好處,但是今天要講的是如何解析這種格式,獲取其中的年 月 日資訊。gson或者fastjson中存在著iso8601utils類 ...