2012-11-22 9 views
18

Szybkim nie myślenia:Format obcięty Python pływak jako int w ciąg

some_float = 1234.5678 
print '%02d' % some_float # 1234 

some_float = 1234.5678 
print '{WHAT?}'.format(some_float) # I want 1234 here too 

Uwaga: {:.0f} nie jest opcją, ponieważ rund (zwraca 1235 w tym przykładzie).

format(..., int(some_float)) jest dokładnie tym, czego staram się unikać, nie sugeruj tego.

+2

@MartijnPieters Być może dlatego, że zaokrągla, a nie obcina? '" {: .0f} ". Format (1234.5678)' jest '" 1235 "', nie '" 1234 "'. – Blckknght

+1

Co zrobić, jeśli konwersja float na 'int()' lub obcięcie są jedynymi opcjami? Kolejnym krokiem jest utworzenie niestandardowej podklasy 'float()' w celu dostosowania haka '.__ w formacie __()'. –

+0

Należy zauważyć, że w tym fragmencie: '% 02d '% some_float' następuje niejawna konwersja do' int', nie można uniknąć konwersji w celu drukowania w pożądanym formacie. –

Odpowiedz

11

Jest możliwe rozszerzenie standardowego języka formatowania ciąg poprzez rozszerzenie klasy string.Formatter:

class MyFormatter(Formatter): 
    def format_field(self, value, format_spec): 
     if format_spec == 't': # Truncate and render as int 
      return str(int(value)) 
     return super(MyFormatter, self).format_field(value, format_spec) 

MyFormatter().format("{0} {1:t}", "Hello", 4.567) # returns "Hello 4" 
12

to działa:

from math import trunc 
some_float = 1234.5678 

print '{:d}'.format(trunc(some_float)) 
=> 1234 

Albo po prostu to zrobić, jeśli o to chodzi:

print trunc(some_float) 
=> 1234 

myślę, że jest to do przyjęcia odpowiedź, unika konwersję do int. Zauważ, że w tym fragmencie: '%02d' % some_float zachodzi niejawna konwersja do int, nie można uniknąć konwersji do drukowania w pożądanym formacie.

-9

to będzie działać zbyt:

some_float = 1234.5678 
f = lambda x: str(x)[:str(x).find('.')] 
print '{}'.format(f(some_float)) 
=> 1234 

Po wykonaniu% timeit przetestować wygląda funkcji obcięcie z biblioteki matematycznej jest szybsza, więc byłoby lepiej, gdybyś musiał sformatować wiele liczb w ten sposób.

+4

Ugh .. to naprawdę zła technika – Vlad

Powiązane problemy