Python a matematika

C,C++,C#

Moderátori: psichac, Moderátori

DanielK
Stály člen
Stály člen
Príspevky: 282
Dátum registrácie: 28 Feb 2015, 14:55

Python a matematika

Príspevok od používateľa DanielK » 12 Jún 2021, 20:19

Python mě neustále štve se svou matematikou, samovolně si přidává desetiná čísla a dělá nepřesné výpočty.
kupříkladu chci zaokrouhlit číslo 0.972 na dvě desetiná místa a co udělá python? :butthead:
Nevíte co s tím?

>>> x = 0.972
>>> print(round(x, 2))
0.9700001
>>>
0

Používateľov profilový obrázok
Andy99
Stály člen
Stály člen
Príspevky: 339
Dátum registrácie: 05 Mar 2008, 00:00
Bydlisko: BA
Vek: 35

Re: Python a matematika

Príspevok od používateľa Andy99 » 12 Jún 2021, 20:37

Kód: Vybrať všetko

$ python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44) 
[GCC 8.3.0] on linux
>>> x=0.9786451212
>>> print(round(x,2))
0.98
>>> 
0

DanielK
Stály člen
Stály člen
Príspevky: 282
Dátum registrácie: 28 Feb 2015, 14:55

Re: Python a matematika

Príspevok od používateľa DanielK » 12 Jún 2021, 22:27

Ano občas to funguje, ale u některý čísel si to dělá co chce, viz jak píšu 0.97 i s tímto číslem ti to jde?
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Python a matematika

Príspevok od používateľa peterple » 12 Jún 2021, 23:35

To nemá nič spoločné s pythonom. To nie je chyba ale vlastnosť.
https://stackoverflow.com/questions/455 ... mal-points

Jeden z mojich jobov kedysi dávno bolo napísať poriadnu aritmetiku pre fiškálny modul k PC pokladni. Keď sumy obratov preliezli cez miliony, začali sa tratiť haliere. Pôvodný pisatelia C programu tiež nevedeli ako to chodí s float aritmetikou.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

DanielK
Stály člen
Stály člen
Príspevky: 282
Dátum registrácie: 28 Feb 2015, 14:55

Re: Python a matematika

Príspevok od používateľa DanielK » 13 Jún 2021, 12:12

Lze mé řešení udělat efektivněji?

Kód: Vybrať všetko

x = 0.97
print(x)
jednotka = str(int(x))
desetina = str(int((x * 10) % 10))
setina = str(int((x * 100) % 10))
print(str(jednotka + "." + desetina + setina))

Kód: Vybrať všetko

0.9700001
0.97
0

Používateľov profilový obrázok
mac26
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1298
Dátum registrácie: 01 Feb 2010, 00:00
Bydlisko: Martin

Re: Python a matematika

Príspevok od používateľa mac26 » 13 Jún 2021, 15:36

kukni sa na printf
0

Používateľov profilový obrázok
Andy99
Stály člen
Stály člen
Príspevky: 339
Dátum registrácie: 05 Mar 2008, 00:00
Bydlisko: BA
Vek: 35

Re: Python a matematika

Príspevok od používateľa Andy99 » 13 Jún 2021, 18:51

Ako uz bolo spomenute na stacku. Mozes pouzivat modul "decimal" alebo priamo format.

Kód: Vybrať všetko

>>> x = 0.972
>>> print("{:.2f}".format(x))
0.97
>>> x = 0.97
>>> print("{:.2f}".format(x))
0.97
>>> x = 0.971234
>>> y = float("{:.2f}".format(x))
>>> print (y)
0.97
>>>
0

Napísať odpoveď