![](/img/trans.png)
[英]How can I convert binary to heximal while keeping the zeros in the beginning?
[英]how to convert numbers into words while keeping leading zeros?
有沒有辦法將數字,字符串中的ether或int轉換為單詞而不會丟失前導零? 我正在嘗試將日期和時間以及電話號碼轉換為單詞,但第二次我將字符串值轉換為int我失去了我的前導零。
這里是我的代碼,用於對數字進行數字處理,只要沒有前導零,它就會很好用。 這是我的問題的一個例子...讓我說我正在約會08-02-2004我不想輸出為零八零二......但是對我來說這是在它的當前狀態我會我必須對方法做一些...除非我遺漏了什么。
units = ["", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine "]
teens = ["", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
tens = ["", "ten", "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"]
thousands = ["","thousand", "million", "billion", "trillion",
"quadrillion", "quintillion", "sextillion", "septillion", "octillion",
"nonillion", "decillion", "undecillion", "duodecillion", "tredecillion",
"quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
"novemdecillion", "vigintillion "]
def numToWords(self, num):
words = []
if num == 0:
words.append("zero")
else:
numStr = "%d" % num
numStrLen = len(numStr)
groups = (numStrLen + 2) / 3
numStr = numStr.zfill(groups * 3)
for i in range(0, groups*3, 3):
h = int(numStr[i])
t = int(numStr[i+1])
u = int(numStr[i+2])
g = groups - (i / 3 + 1)
if h >= 1:
words.append(units[h])
words.append("hundred")
if t > 1:
words.append(tens[t])
if u >= 1:
words.append(units[u])
elif t == 1:
if u >= 1:
words.append(teens[u])
else:
words.append(tens[t])
else:
if u >= 1:
words.append(units[u])
if g >= 1 and (h + t + u) > 0:
words.append(thousands[g])
return ' '.join([w for w in words])
任何有關這方面的幫助或建議將不勝感激。
確保你首先提供一個字符串,並且只在必要時才計算為int。 例如:
def numToWords(self, numStr):
words = []
if int(numStr) == 0:
words.append("zero")
else:
# no longer needed, it's already a string
# numStr = "%d" % num
numStrLen = len(numStr)
groups = (numStrLen + 2) /
...
使用%d將int格式化為字符串時,它會刪除任何前導零。 要保留它們,您需要指定最小位數,如下所示:
numStr = "%03d" % num
這會將前導零附加到任何小於3位的數字(在這種情況下使最小位數為3)。 但是,在你不顧一切地敲擊前導零之前,首先需要確定你想要看多少總數。
使用遞歸方法這個解決方案怎么樣?
def numToWords(i):
if i < 20:
result = 'zero,one,two,three,four,five,six,\
seven,eight,nine,ten,eleven,twelve,\
thirteen,fourteen,fifteen,sixteen,\
seventeen,eighteen,nineteen'.split(',')[i]
elif i < 100:
result = ',,twenty,thirty,forty,fifty,sixty,seventy,\
eighty,ninety'.split(',')[i//10]
if i % 10:
result += ' ' + numToWords(i % 10)
elif i < 1000:
result = checkio(i // 100) + ' hundred'
if i % 100:
result += ' ' + numToWords(i % 100)
return result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.