Como obtenho os números após um ponto decimal?
Por exemplo, se eu tiver 5.55
, como recebo .55
?
python
floating-point
decimal
eu--''''''---------''''''''''''
fonte
fonte
Respostas:
Uma abordagem fácil para você:
fonte
number_dec = str(number-int(number)).split('.')[1]
5.55 % 1
que também é uma resposta mais geralmente útil - é possível usar a abordagem de divisão de módulos em vários idiomas, enquanto a resposta acima é específica para Python..55
), que você não pode esperar devido ao título das perguntas!str(5.55 - int(5.55))[1:]
retorna em.5499999999999998
vez do.55
mencionado na pergunta.Lembre-se de que isso não ajudará em problemas de arredondamento de ponto flutuante. Ou seja, você pode obter:
Ou então, um pouco de 0,55 que você está esperando.
fonte
modf
, também pode estragar a precisão:math.modf(5.55)
retornará (0.5499999999999998, 5.0).x%1
era quase duas vezes mais rápido que os métodosx-int(x)
emodf(x)[0]
(os tempos eram 980ns, 1,39us e 1,47us, em média, em 1000000 execuções). Meu valorx
sempre foi positivo, então não precisei me preocupar com isso.Use modf :
fonte
math.modf(2.53) = (0.5299999999999998, 2.0)
resposta esperada é 0,53A respeito:
Ou, usando numpy:
fonte
Usando o
decimal
módulo da biblioteca padrão, você pode manter a precisão original e evitar problemas de arredondamento de ponto flutuante:Como notas gentis nos comentários, você precisará primeiro converter s nativos em strings.
float
fonte
n = 5.55
, n é uma bóia e deve fazerDecimal(str(n)) % 1
para obter a parte fracionária. (Isto não é necessário se você tiver um inteiro, mas não faz mal.)10.0/3 % 1
pelo menos no meu sistemaDecimal.from_float(1.2)
(que agora pode ser escrito comoDecimal(1.2)
), você terá problemas de arredondamento, os quais esta resposta estava tentando evitar.Experimente o Módulo:
fonte
semelhante à resposta aceita, uma abordagem ainda mais fácil usando strings seria
fonte
number = 5.55; "." in number
dáTypeError: argument of type 'float' is not iterable
. E o que você faria senumber = 1e-5
?float
; O Python não mantém nenhum conhecimento de qual formato foi originalmente expresso. Meunumber = 1e-5
exemplo se aplica igualmente bem anumber = 0.00001
: astr
representação do número está em notação científica. Você vai querer lidar come+
, bem comoe-
, a propósito.fonte
fonte
Esta é uma solução que eu tentei:
fonte
Às vezes, zeros à direita importam
fonte
Use floor e subtraia o resultado do número original:
fonte
import math
, por que não usarmath.modf()
?math.floor(-1.1) == -2
masint(-1.1) == -1
. Embora para esta pergunta usandoint
é mais correto.Os números flutuantes não são armazenados no formato decimal (base10). Leia a documentação do python sobre isso para entender por que. Portanto, não é aconselhável obter uma representação base10 de um flutuador.
Agora, existem ferramentas que permitem o armazenamento de dados numéricos em formato decimal. Abaixo está um exemplo usando a
Decimal
biblioteca.fonte
Exemplo:
Isso fornecerá dois números após o ponto decimal, 55 desse exemplo. Se você precisar de um número, reduz em 10 os cálculos acima ou aumenta dependendo de quantos números deseja após o decimal.
fonte
Definitivamente funcionou
fonte
Usando simples divisão de operador '/' e divisão de piso '//', você pode facilmente obter a parte da fração de qualquer flutuador.
fonte
A respeito:
Resultado:
print(b)
0.23399999999999999
round(b, length-2)
0.234
Como a rodada é enviada para o comprimento da sequência de decimais ('0,234'), podemos apenas menos 2 para não contar o '0' e descobrir o número desejado de pontos decimais. Isso deve funcionar na maioria das vezes, a menos que você tenha muitas casas decimais e o erro de arredondamento ao calcular b interfere no segundo parâmetro da rodada.
fonte
Você pode tentar o seguinte:
Voltará
0.55
.fonte
saída: 0.55
fonte
Veja o que geralmente faço para obter números após o ponto decimal no python 3:
fonte
Se você estiver usando pandas:
fonte
Outra opção seria usar o
re
módulo comre.findall
oure.search
:Resultado
Se você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, também é possível assistir neste link , como ele corresponderia a algumas entradas de amostra.
Fonte
Como se livrar de números flutuantes adicionais na subtração python?
fonte
Descobri que números muito grandes com partes fracionárias muito grandes podem causar problemas ao usar o módulo 1 para obter a fração.
Peguei a parte integrante e subtraí-a primeiro para ajudar a simplificar o restante.
fonte
Outro exemplo usando modf
fonte
Uma solução está usando módulo e arredondamento.
Sua saída será 0,55
fonte
Você pode usar isto:
fonte
Outra solução louca é (sem converter em uma string):
fonte