Eu tenho um número de ponto flutuante, digamos 135.12345678910
. Eu quero concatenar esse valor para uma string, mas só quero 135.123456789
. Com a impressão, posso fazer isso facilmente fazendo algo como:
print "%.9f" % numvar
por numvar
ser meu número original. Existe uma maneira fácil de fazer isso?
python
string
floating-point
pauliwago
fonte
fonte
Respostas:
Com Python <3 (por exemplo, 2.6 [veja comentários] ou 2.7), existem duas maneiras de fazer isso.
Mas observe que para versões do Python acima de 3 (por exemplo, 3.2 ou 3.3), a opção dois é preferida .
Para obter mais informações sobre a opção dois, sugiro este link sobre formatação de string na documentação do Python .
E para obter mais informações sobre a opção um, esse link será suficiente e terá informações sobre os vários sinalizadores .
O Python 3.6 (lançado oficialmente em dezembro de 2016), adicionou a
f
string literal, veja mais informações aqui , que estendem ostr.format
método (uso de chaves de forma af"{numvar:.9f}"
resolver o problema original), ou seja,resolve o problema. Confira a resposta de @ Or-Duan para obter mais informações, mas esse método é rápido .
fonte
newer_method_string = "{:.9f}".format(numvar)
- observe o necessário:
para separar o campo e a formatação. Eu testei isso no 2.7.5 de qualquer maneira.newer_method_string = "{0:.9f}".format(numvar)
- observe o 0 necessário para o field_name para esta versão mais antiga.Python 3.6
Apenas para esclarecer, você pode usar a formatação de f-string . Isso tem quase a mesma sintaxe que o
format
método, mas o torna um pouco melhor.Exemplo:
Mais informações sobre a nova string f:
Aqui está um diagrama dos tempos de execução dos vários métodos testados (do último link acima):
fonte
Usando
round
:fonte
Não é a impressão que faz a formatação, é uma propriedade de strings, então você pode simplesmente usar
fonte
Caso a precisão não seja conhecida até o tempo de execução, essa outra opção de formatação é útil:
fonte
.format
-method, nota que este também pode ser feito por argumentos de nidificação assim:'{:.{n}f}'.format(numvar,n=n)
.Para definir a precisão com 9 dígitos, obtenha:
Precisão de retorno com 2 dígitos:
Precisão de retorno com 2 dígitos e valor convertido flutuante:
fonte
A
str
função tem um erro. Por favor, tente o seguinte. Você verá '0,196553', mas a saída correta é '0,196554'. Porque ostr
valor padrão da função é ROUND_HALF_UP.fonte
.
vs.,
? E como isso é relevante para a pergunta de pauliwago?