Hoe kry ek 'n desimale waarde wanneer die gebruik van die afdeling operateur in Python?
-
02-07-2019 - |
Vra
Byvoorbeeld, die standaard-afdeling simbool '/' rondes aan nul:
>>> 4 / 100
0
Maar ek wil dit om terug te keer 0.04. Wat kan ek gebruik?
Oplossing
Daar is drie opsies:
>>> 4 / float(100)
0.04
>>> 4 / 100.0
0.04
wat dieselfde gedrag as die C, C ++, Java, ens, of
>>> from __future__ import division
>>> 4 / 100
0.04
Jy kan ook aktiveer hierdie gedrag deur die verbygaan van die argument -Qnew
om die Python tolk:
$ python -Qnew
>>> 4 / 100
0.04
Die tweede opsie sal die verstek in Python 3.0 wees. As jy wil die ou heelgetal afdeling het, moet jy die //
operateur gebruik.
Edit : bygevoeg artikel oor -Qnew
, te danke aan ΤΖΩΤΖΙΟΥ
Ander wenke
Ander antwoorde raai hoe om 'n swaai-punt waarde te kry. Terwyl hierdie naby aan wat jy wil ie wees, sal dit nie presies te wees:
>>> 0.4/100.
0.0040000000000000001
As jy werklik wil 'n desimale waarde, doen die volgende:
>>> import decimal
>>> decimal.Decimal('4') / decimal.Decimal('100')
Decimal("0.04")
Dit sal jou 'n voorwerp wat behoorlik weet wat 4/100 in basis 10 is "0.04" gee. Swaai-punt getalle is eintlik in basis 2, maw binêre, nie desimaal.
Maak een of albei van die terme 'n drywende punt nommer, soos so:
4.0/100.0
As alternatief, draai op die funksie wat standaard in Python 3.0, 'n ware afdeling, wat doen wat jy wil wees. Op die top van jou module of script, doen:
from __future__ import division
Jy mag dalk wil om te kyk na Python se desimale pakket, ook. Dit sal lekker desimale resultate te lewer.
>>> decimal.Decimal('4')/100
Decimal("0.04")
Jy moet Python vertel om te gebruik drywende punt waardes, nie heelgetalle. Jy kan dit doen deur eenvoudig die gebruik van 'n desimale punt jouself in die insette:
>>> 4/100.0
0.040000000000000001
Probeer 4.0 / 100
'n eenvoudige roete 4 / 100.0
of
4.0 / 100
Hier het ons twee moontlike gevalle gegee hieronder
from __future__ import division
print(4/100)
print(4//100)
Jy kan ook probeer om die toevoeging van 'n "0,0" aan die einde van die getal.
4.0 / 100.0
Jy kan nie 'n desimale waarde word deur een getal met 'n ander te kry, sal jy altyd kry 'n heelgetal op die manier (tot gevolg afgekapte om heelgetal). Jy moet ten minste een waarde aan 'n desimale getal wees.
Voeg die volgende funksie in jou kode met sy terugbel.
# 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
Hierdie funksie werk op die basis van "Euclid delingsalgoritme". Hierdie funksie is baie nuttig as jy nie wil hê dat enige eksterne kop lêers in jou projek.
Syntex: kloof ([Divident], [deler], [desimale plek (opsioneel))
Kode: divide(1, 7, 10)
OR divide(1, 7)
Kommentaar hieronder vir enige navrae.
Voer afdeling van toekomstige biblioteek soos volg:
from__future__ import division