2014-09-10 21 views
7

Próbuję wygenerować ciąg, który zawiera sporadyczne wartości zmiennoprzecinkowe z zerami końcowymi. Jest to MWE łańcucha tekstowego i moja próba usunięcia ich z {0:g}:. Format() zwraca wartość ValueError podczas używania {0: g} do usuwania zer końcowych

xn, cod = 'r', 'abc' 
ccl = [546.3500, 6785.35416] 
ect = [12.350, 13.643241] 

text = '${}_{{t}} = {0:g} \pm {0:g}\;{}$'.format(xn, ccl[0], ect[0], cod) 
print text 

Niestety ta zwraca:

ValueError: cannot switch from automatic field numbering to manual field specification 

To pytanie Using .format() to format a list with field width arguments zgłoszone w tej samej sprawie, ale nie mogę dowiedzieć się, jak zastosować udzieloną tam odpowiedź na ten problem.

+1

Nie jestem pewien, czy rozumiem, co próbujesz osiągnąć za pomocą 'g'. Zero znaków w literałach typu "float" nie ma znaczenia, więc '546.3500' jest dokładnie tym samym numerem co' 546,35' (i oba będą drukować tak samo, bez względu na to, czy tego chcesz, czy nie). – Blckknght

+0

@Blckknght wypróbuj 'print '{0} {0: g}'. Format (50.0)'. Nie drukują tego samego. – Gabriel

+0

Czytając ponownie pytanie, czy prawdopodobnie chciałeś '{: 0g}' zamiast '{0: g}'? Nie jestem pewien, czy ten pierwszy jest bardzo przydatny, ale jest ważny. – Blckknght

Odpowiedz

14

{} używa automatycznej numeracji pól. {0:g} używa ręcznego numerowania pól.

Nie mieszaj dwóch. Jeśli zamierzasz używać ręcznej numeracji pól, użyj go wszędzie:

text = '${0}_{{t}} = {1:g} \pm {2:g}\;{3}$'.format(xn, ccl[0], ect[0], cod) 
+0

Świetna odpowiedź unubtu, drobna korekta, być może chodziło o:' $ {0} _ {{t}} = {1: g} \ pm {2: g} \; {3} $ '? – Gabriel

+1

Dzięki Gabriel, nie byłem pewien, jakie numery pól użyć, ponieważ oryginalny kod używał' {0: g} 'dwa razy i ale były cztery argumenty ments ... – unutbu

Powiązane problemy