Pergunta

Por exemplo, o símbolo de divisão padrão '/' rounds a zero:

>>> 4 / 100
0

No entanto, quero que ele retorne 0,04. O que eu uso?

Foi útil?

Solução

Há três opções:

>>> 4 / float(100)
0.04
>>> 4 / 100.0
0.04

o que é o mesmo comportamento como o C, C ++, Java, etc, ou

>>> from __future__ import division
>>> 4 / 100
0.04

Você também pode ativar este comportamento, passando a -Qnew argumento para o interpretador Python:

$ python -Qnew
>>> 4 / 100
0.04

A segunda opção será o padrão no Python 3.0. Se você quer ter a divisão inteira de idade, você tem que usar o operador //.

Editar : Adicionada uma seção sobre -Qnew, graças a ??O?????

Outras dicas

Outras respostas sugerem como obter um valor de ponto flutuante. Enquanto isso wlil estar perto do que você quer, não vai ser exato:

>>> 0.4/100.
0.0040000000000000001

Se você realmente quer um decimal valor, faça o seguinte:

>>> import decimal
>>> decimal.Decimal('4') / decimal.Decimal('100')
Decimal("0.04")

Isso lhe dará um objeto que sabe bem que 4/100 em base 10 é "0.04". números de ponto flutuante são, na verdade, na base 2, ou seja, binário, não decimal.

Faça um ou ambos os termos um número de ponto flutuante, assim:

4.0/100.0

Como alternativa, ativar o recurso que será padrão no Python 3.0, 'verdadeira divisão', que faz o que quiser. Na parte superior do seu módulo ou script, faça:

from __future__ import division

Você pode querer olhar em decimal pacote de Python, também. Isto irá fornecer bons resultados decimais.

>>> decimal.Decimal('4')/100
Decimal("0.04")

Você precisa dizer Python para usar valores de ponto flutuante, e não inteiros. Você pode fazer isso simplesmente usando um ponto decimal-se nas entradas:

>>> 4/100.0
0.040000000000000001

Tente 4.0 / 100

A rota simples 4 / 100,0

ou

4.0 / 100

Aqui temos dois casos possíveis dado abaixo

from __future__ import division

print(4/100)
print(4//100)

Você também pode tentar adicionar um" 0,0" no final do número.

4.0 / 100,0

Você não pode obter um valor decimal, dividindo um inteiro com outro, você vai hair obter um inteiro dessa maneira (resultado truncado para inteiro). Você precisa de pelo menos um valor a ser um número decimal.

Adicione a seguinte função em seu código com o seu retorno.

# Starting of the function
def divide(number_one, number_two, decimal_place = 4):
    quotient = number_one/number_two
    remainder = number_one % number_two
    if remainder != 0:
        quotient_str = str(quotient)
        for loop in range(0, decimal_place):
            if loop == 0:
                quotient_str += "."
            surplus_quotient = (remainder * 10) / number_two
            quotient_str += str(surplus_quotient)
            remainder = (remainder * 10) % number_two
            if remainder == 0:
                break
        return float(quotient_str)
    else:
        return quotient
#Ending of the function

# Calling back the above function
# Structure : divide(<divident>, <divisor>, <decimal place(optional)>)
divide(1, 7, 10) # Output : 0.1428571428
# OR
divide(1, 7) # Output : 0.1428

Esta função funciona com base no "Euclides Divisão Algorithm". Esta função é muito útil se você não deseja importar quaisquer arquivos de cabeçalho externos em seu projeto.

Syntex: divide ([divident], [divisor], [casa decimal (opcional))

Código: divide(1, 7, 10) OU divide(1, 7)

Comentário abaixo para qualquer dúvida.

divisão de importação da biblioteca futuro como esta:

from__future__ import division
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top