2012-05-08 20 views
8

Ben mesela varsa x ben şu sonucu istiyorum = 40: x = 2.5 sonuç gibi olmalıdır içinPython dize enterpolasyon: sadece gerekli ondalık gösterir

40" 

...

2.5" 

Yani temelde en fazla bir ondalık yere biçimlendirmek istediğiniz. Şu anda bu kullanın:

"{0:0.1f}\"".format(x, 1) 

Ama bu ne istiyorum gerçekten değil tam olarak bir ondalık basamak, ...

+0

-0.05 dosyaya ne olur? –

+0

Sondaki haneleri yuvarlaklaştırmak veya kesmek mi istiyorsunuz? – prelic

cevap

9

Seçeneklerden biri gösterecektir

"{0}\"".format(str(round(x, 1) if x % 1 else int(x))) 

gibi bir şey her zaman görüntüler Kesirli parça yoksa, x bir tamsayı olarak. Bu konuda gitmenin daha iyi bir yolu olabilir.

+0

Çok teşekkür ederim! :) – dom0

+0

Sorun değil :) Bu yardımcı olur sevindim. Bu konuda başka birinin daha temiz bir yolu olup olmadığını merak etse de. –

+0

Biçim (…) 'için 2. argüman nedir? (burada: 1) – lajarre

3

Belki mutlaka tamamen temiz değil çözüm, ama en azından biraz daha açık düşünüyorum: (Michael Mior yuvarlama fikrine göre) daha şifreli değiştirilebilir

"{1:0.{0}f}\"".format(int(not float(x).is_integer()), x) 

:

"{1:0.{0}f}\"".format(int(x % 1 > 0), x) 

daha kısa ifadeleri (gerçi az pythonic) tercih ederseniz. Bu yeniden kullanılabilir

+0

. Ve 2 versiyonu bana (temizleyici) daha üstündür – lajarre

4

, str, float veya int kullanılabilir ve ''0 için dönüştürür:

def minimalNumber(x): 
    if type(x) is str: 
     if x == '': 
      x = 0 
    f = float(x) 
    if f.is_integer(): 
     return int(f) 
    else: 
     return f 

kullanımı ile:

print "{}\"".format(minimalNumber(x)) 

Örnek:

x = 2.2 
print "{}\"".format(minimalNumber(x)) 
x = 2.0 
print "{}\"".format(minimalNumber(x)) 

Hangi çıkışları:

2.2" 
2" 
+1

Sen() 'tamsayılar kullanımı için izin vermek' şamandıra (x) .is_integer kullanmak isteyebilirsiniz. ('Is_integer' tamsayı için tanımlanmamıştır) –

+0

kabul etti. Teşekkür ederim. –

İlgili konular