-12.345 -> -012.345
凡離開小數點可以-999-> 999(我的特殊需要)和正量十進制數字
我想出了兩種方法來做到這一點:
但這似乎非常無厘頭的是蟒蛇。我看到了以前類似的問題,但不喜歡的答案...
>>> "%06.2f"%3.3
'003.30'
,因爲它假設你已經知道你的小數點是和你有多少個十進制數字都有。
這似乎是一個常見的情況,那麼有一個現有的更好/清潔/單fncall,方式去這在Python 2.7?
-12.345 -> -012.345
凡離開小數點可以-999-> 999(我的特殊需要)和正量十進制數字
我想出了兩種方法來做到這一點:
但這似乎非常無厘頭的是蟒蛇。我看到了以前類似的問題,但不喜歡的答案...
>>> "%06.2f"%3.3
'003.30'
,因爲它假設你已經知道你的小數點是和你有多少個十進制數字都有。
這似乎是一個常見的情況,那麼有一個現有的更好/清潔/單fncall,方式去這在Python 2.7?
不知道這是pythonic。它只是填充整數和concat小數。
def pad(x, p):
return ('%0'+str(p+(x<0 and 1 or 0))+'d%s') % (x,str(x-int(x))[x<0 and 2 or 1:])
測試
pad(-3,3) -> -003
pad(3,3) -> 003
pad(-3.3,3) -> -003.3
pad(3.3,3) -> 003.3
@steveha,這很棘手。感謝他們的接觸 – Fabricator
這是一個令人失望的地方,它似乎並不是一個漂亮的建築,但是b.a.尋找一些瘋狂的拼接邏輯。我不知道這可以做到。 – pyInTheSky
我想你已經找了個角落的情況。指定小數點左側和右側的數字很容易;指定總位數也很容易;指定左側的數字並且完全不指定右側的數字並不容易。
我建議做最乾淨的事情是隻取浮子和格式,再取餾分和格式化(未指定的長度)的整數部分。
這裏是一個測試功能確實你要的那種東西,也可以正確處理負數。
import math
def float_lformat(f, width):
neg = f < 0.0
fraction, n = math.modf(abs(f)) # get fraction and integer parts of f
if neg and width > 0:
width -= 1
s = "%0*d" % (width, n) + str(fraction)[1:]
if neg:
s = '-' + s
return s
是的,我正在參加NMEA拉特。值已經從str轉換爲float(失去它對於lats <100的前導0),然後將其格式化,所以不是顯示數字的最常見方法。 – pyInTheSky
固定和動態分數:
>>> "{:08}".format(-12.345)
'-012.345'
>>> a,b=str(x).split('.');a=int(a);"{}{:03}.{}".format('-' if a<0 else"",abs(a),b)
'-012.345'
整理了:
def pad(x):
a, b = str(x).split('.')
a = int(a)
return '{}{:03}.{}'.format('-' if a < 0 else ' ', abs(a), b)
for x in [12.0, 12.345, -12.345, -12.3456]:
print('{:>8} -> {}'.format(x, pad(x)))
輸出:
12.0 -> 012.0
12.345 -> 012.345
-12.345 -> -012.345
-12.3456 -> -012.3456
相信['''str.format()' ''](https://docs.python.org/2/library/string.html#formatspec)是你想要的 – wnnmaw
http://stackoverflow.com/questions/17118071/python-add-leading-zeroes-using-str-format看起來像它很好地與整數工作,但不漂浮,因爲我的寬度是可變的取決於小數位數量,所以從我可以告訴,我仍然需要計算我有十進制數字:\ – pyInTheSky
@pyInTheSky:你是什麼意思*小數位數量*?花車*近似值*,總是最終舍入*無論如何*。例如,「-12.345」不是正好*'-12.345'。 '格式(-12.345,'.53f')'>''-12.34500000000000063948846218409016728401184082031250000''。 –