Jak uzyskać wartość dziesiętną podczas korzystania z operatora podziału w Pythonie?

Na przykład standardowy symbol podziału " / " zaokrągla się do zera:

>>> 4 / 100
0

Jednak chcę, aby zwrócił 0.04. Czego używam?

Author: Primoz, 2008-09-23

11 answers

Są trzy opcje:

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

Które jest takim samym zachowaniem jak C, C++, Java itp, Czy

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

Można również aktywować to zachowanie przekazując argument -Qnew do interpretera Pythona:

$ python -Qnew
>>> 4 / 100
0.04

Druga opcja będzie domyślna w Pythonie 3.0. Jeśli chcesz mieć Stary podział liczb całkowitych, musisz użyć operatora //.

Edit : Dodano sekcję o -Qnew, dzięki ΤΖΩΤΖΙΟΥ !

 115
Author: Torsten Marek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:05

Inne odpowiedzi sugerują, jak uzyskać wartość zmiennoprzecinkową. Chociaż to wlil być blisko tego, co chcesz, to nie będzie dokładne:

>>> 0.4/100.
0.0040000000000000001

Jeśli chcesz mieć wartość dziesiętną , zrób to:

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

To da ci obiekt, który prawidłowo wie, że 4 / 100 W baza 10 wynosi "0.04". Liczby zmiennoprzecinkowe są w zasadzie w bazie 2, tj. binarne, a nie dziesiętne.

 24
Author: Glyph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 21:12:07

Niech jeden lub oba terminy będą liczbami zmiennoprzecinkowymi, w ten sposób:

4.0/100.0

Alternatywnie, włącz funkcję, która będzie domyślna w Pythonie 3.0, 'true division', która robi to, co chcesz. Na górze modułu lub skryptu, do:

from __future__ import division
 7
Author: Thomas Wouters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 20:08:45

Musisz powiedzieć Pythonowi, aby używał wartości zmiennoprzecinkowych, a nie liczb całkowitych. Można to zrobić po prostu używając przecinka w wejściach:

>>> 4/100.0
0.040000000000000001
 3
Author: moonshadow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 20:07:38

Możesz też zajrzeć do pakietu decimal Pythona. Zapewni to dobre wyniki dziesiętne.

>>> decimal.Decimal('4')/100
Decimal("0.04")
 3
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 21:38:16

Try 4.0 / 100

 1
Author: Martin Cote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 20:07:20

Prosta droga 4 / 100.0

LUB

4.0 / 100

 1
Author: torial,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 20:07:27

Tutaj mamy dwa możliwe przypadki podane poniżej

from __future__ import division

print(4/100)
print(4//100)
 1
Author: Jai Narayan Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 06:51:23

Nie możesz uzyskać wartości dziesiętnej dzieląc jedną liczbę całkowitą z inną, zawsze otrzymasz liczbę całkowitą w ten sposób (wynik obcięty do liczby całkowitej). Aby Liczba dziesiętna była równa co najmniej jednej wartości.

 0
Author: Vasil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 20:11:02

Dodaj następującą funkcję w kodzie z jego wywołaniem zwrotnym.

# 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

Ta funkcja działa na podstawie "algorytmu podziału Euklidesa". Ta funkcja jest bardzo przydatna, jeśli nie chcesz importować żadnych zewnętrznych plików nagłówkowych w projekcie.

Syntex: divide ([divident], [divisor], [decimal place(opcjonalne))

Kod: divide(1, 7, 10) lub divide(1, 7)

Komentarz poniżej dla wszelkich zapytań.

 0
Author: DaredevilRanon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-04 08:28:42

Importuj podział z przyszłej biblioteki w następujący sposób:

from__future__ import division
 -3
Author: T. Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 11:22:07