Strana 1 z 1

Python a matematika

Napísané: 12 Jún 2021, 20:19
od používateľa DanielK
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
>>>

Re: Python a matematika

Napísané: 12 Jún 2021, 20:37
od používateľa Andy99

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
>>> 

Re: Python a matematika

Napísané: 12 Jún 2021, 22:27
od používateľa DanielK
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?

Re: Python a matematika

Napísané: 12 Jún 2021, 23:35
od používateľa peterple
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.

Re: Python a matematika

Napísané: 13 Jún 2021, 12:12
od používateľa DanielK
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

Re: Python a matematika

Napísané: 13 Jún 2021, 15:36
od používateľa mac26
kukni sa na printf

Re: Python a matematika

Napísané: 13 Jún 2021, 18:51
od používateľa Andy99
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
>>>