[python] Konverze řetězce na float

Radek Kanovsky rk na dat.cz
Úterý Květen 11 11:09:15 CEST 2004


On Tue, May 11, 2004 at 10:53:42AM +0200, Jan Fuchs wrote:

> Ahoj,
> můžu nějakým způsobem docílit správného převedení řetězce např. "12.2"
> na číslo float 12.2? Zkoušel jsem to dvěmi následujícími způsoby, ale
> ani jeden nefunguje dle mých představ. Lépe řečeno, oba narazí na problém
> ve stejném místě a JÁ nevím jak to obejít.
> 
> >>> cislo = string.atof("12.2")
> >>> cislo
> 12.199999999999999
> >>> round(cislo, 2)
> 12.199999999999999

To neni zalezitost Pythonu, ale reprezentace realnych cisel v dvojkove
soustave v beznych pocitacich. 12.2 ma v dvojkove soustave nekonecny
rozvoj, proto jej nelze presne uchovat v pameti jako float.

Pokud potrebujete presne pocitat penize nebo neco jineho, pouzijte
cisla pevnym poctem desetinych mist. Zadny modul, ktery by to umel,
ale neni soucasti standardni distribuce Pythonu. Pouzitelne implementace
najdete treba zde:

  http://cvs.sourceforge.net/viewcvs.py/python/python/nondist/sandbox/decimal/
  http://fixedpoint.sourceforge.net/
  http://starship.python.net/crew/aahz/FixedPoint.py

Zdravi

Radek Kaňovský



Další informace o konferenci Python