web-dev-qa-db-fra.com

Comment obtenir une valeur décimale lorsque j'utilise l'opérateur de division en Python?

Par exemple, le symbole de division standard '/' arrondit à zéro:

>>> 4 / 100
0

Cependant, je veux qu'il retourne 0,04. Qu'est-ce que j'utilise?

58
Ray Vega

Il y a trois options:

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

qui est le même comportement que le C, C++, Java, etc., ou 

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

Vous pouvez également activer ce comportement en passant l'argument -Qnew à l'interpréteur Python:

$ python -Qnew
>>> 4 / 100
0.04

La deuxième option sera la valeur par défaut dans Python 3.0. Si vous voulez avoir l'ancienne division entière, vous devez utiliser l'opérateur //

Edit: ajout d'une section sur -Qnew, grâce à ΩΤΖΙΟΥ !

121
Torsten Marek

D'autres réponses suggèrent comment obtenir une valeur en virgule flottante. Bien que cela soit proche de ce que vous voulez, ce ne sera pas exact:

>>> 0.4/100.
0.0040000000000000001

Si vous voulez réellement une valeur decimal, procédez comme suit:

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

Cela vous donnera un objet qui sait correctement que 4/100 dans base 10 est "0.04". Les nombres à virgule flottante sont en réalité en base 2, c'est-à-dire binaires et non décimaux.

24
Glyph

Faites de l’un ou des deux termes un nombre à virgule flottante, comme suit:

4.0/100.0

Sinon, activez la fonctionnalité qui sera la valeur par défaut dans Python 3.0, la "vraie division", qui fait ce que vous voulez. En haut de votre module ou script, faites:

from __future__ import division
7
Thomas Wouters

Vous voudrez peut-être aussi regarder le fichier decimal package de Python. Cela fournira de bons résultats décimaux.

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

Vous devez indiquer à Python d'utiliser des valeurs à virgule flottante et non des nombres entiers. Vous pouvez le faire simplement en utilisant vous-même un point décimal dans les entrées:

>>> 4/100.0
0.040000000000000001
3
moonshadow

Essayez 4.0/100

1
Martin Cote

Un itinéraire simple 4/100.0 

ou

4.0/100

1
torial

Ici nous avons deux cas possibles donnés ci-dessous 

from __future__ import division

print(4/100)
print(4//100)
1
Jai Narayan Singh

Vous pouvez également essayer d’ajouter un «.0» à la fin du nombre.

4.0/100.0

1
Appu

Vous ne pouvez pas obtenir une valeur décimale en divisant un entier par un autre, vous obtiendrez toujours un entier de cette façon (résultat tronqué en entier). Vous avez besoin d'au moins une valeur pour être un nombre décimal.

0
Vasil

Ajoutez la fonction suivante dans votre code avec son rappel.

# 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

Cette fonction fonctionne sur la base de "l'algorithme de division d'Euclide". Cette fonction est très utile si vous ne souhaitez importer aucun fichier d’en-tête externe dans votre projet.

Syntex: divide ([divident], [diviseur], [décimale (facultatif))

Code: divide(1, 7, 10) OR divide(1, 7)

Commentaire ci-dessous pour toute question.

0
DaredevilRanon