Aqui está o meu código:
x = 1.0
y = 100000.0
print x/y
Meu quociente é exibido como 1.00000e-05
.
Existe alguma maneira de suprimir a notação científica e torná-la exibida como
0.00001
? Vou usar o resultado como uma string.
python
floating-point
Matt
fonte
fonte
Respostas:
mas você precisa gerenciar a precisão você mesmo. por exemplo,
exibirá apenas zeros.
detalhes estão nos documentos
Ou para Python 3 a formatação antiga equivalente ou a formatação de estilo mais recente
fonte
Usando a versão mais recente
''.format
(lembre-se de especificar quantos dígitos após o que.
você deseja exibir, isso depende de quão pequeno é o número flutuante). Veja este exemplo:como mostrado acima, o padrão é 6 dígitos! Isso não é útil para o nosso exemplo de caso; portanto, poderíamos usar algo como isto:
Atualizar
A partir do Python 3.6, isso pode ser simplificado com a nova literal de string formatada , da seguinte maneira:
fonte
f"{a:.{precision}f}"
Com as versões mais recentes do Python (2.6 e posterior), você pode usar
''.format()
para realizar o que o @SilentGhost sugeriu:fonte
>>> print('{:f}'.format(0.000000123))
0.000000
'{0:.10f}'
Outra opção, se você estiver usando pandas e quiser suprimir a notação científica para todos os carros alegóricos, é ajustar as opções de pandas.
fonte
A maioria das respostas acima exige que você especifique precisão. Mas e se você quiser exibir carros alegóricos como este, sem zeros desnecessários:
numpy
tem uma resposta:np.format_float_positional
fonte
Isso funcionará para qualquer expoente:
fonte
Isto está usando a resposta do capitão Pepino , mas com 2 adições.
1) permitir que a função obtenha números de notação não científicos e apenas retorne-os como estão (para que você possa fornecer muitas informações de que alguns dos números são 0,00003123 vs 3,123e-05 e ainda possuem funções funcionais.
2) suporte adicionado para números negativos. (na função original, um número negativo terminaria como 0,0000-108904 de -1,08904e-05)
fonte
Além da resposta da SG, você também pode usar o módulo Decimal:
fonte
Se for um
string
, use o internofloat
para fazer a conversão, por exemplo:print( "%.5f" % float("1.43572e-03"))
answer:0.00143572
fonte
Como este é o melhor resultado no Google, postarei aqui depois de não encontrar uma solução para o meu problema. Se você deseja formatar o valor de exibição de um objeto flutuante e ele permanecer flutuante - e não uma string, você pode usar esta solução:
Crie uma nova classe que modifique a maneira como os valores flutuantes são exibidos.
Você pode modificar a precisão alterando os valores inteiros em
{:f}
fonte
Usando 3.6.4, eu estava tendo um problema semelhante que, aleatoriamente, um número no arquivo de saída seria formatado com notação científica ao usar isso:
Tudo o que eu tive que fazer para corrigir isso foi adicionar 'f':
fonte
A partir da versão 3.6 (provavelmente também funciona com a versão 3.x um pouco mais antiga), esta é a minha solução:
O objetivo do
precision
cálculo é garantir que tenhamos precisão suficiente para manter fora da notação científica (a precisão padrão ainda é 6).O
dec_precision
argumento adiciona precisão adicional a ser usada para pontos decimais. Como isso faz uso don
formato, nenhum zeros insignificante será adicionado (diferente dosf
formatos).n
também cuidará de renderizar números inteiros já redondos sem um decimal.n
requerfloat
entrada, portanto, o elenco.fonte