/ / Je tam viac čitateľný alebo Pythonic spôsob formátovania desatinných miest na 2 miesta? - python, desatinné číslo, zaokrúhľovanie

Existuje viac čitateľný alebo Pythonic spôsob, ako formátovať desatinnú hodnotu na 2 miestach? - python, desatinné, zaokrúhľovanie

Čo sa sakra deje so syntaxou na opravu desatinných miest na dve miesta?

>>> from decimal import Decimal
>>> num = Decimal("1.0")
>>> num.quantize(Decimal(10) ** -2) # seriously?!
Decimal("1.00")

Existuje nejaký lepší spôsob, ako to na prvý pohľad nevyzerá tak ezotericky? "Kvantizácia desatinného miesta" znie ako technobabble z epizódy Star Trek!

odpovede:

6 pre odpoveď č. 1

Použiť formátovanie reťazca:

>>> from decimal import Decimal
>>> num = Decimal("1.0")
>>> format(num, ".2f")
"1.00"

Na format() funkcie aplikuje formátovanie reťazca na hodnoty. Decimal() objekty možno formátovať ako hodnoty s plávajúcou desatinnou čiarkou.

Môžete to tiež použiť na interpoláciu formátovanej desatinnej hodnoty je väčší reťazec:

>>> "Value of num: {:.2f}".format(num)
"Value of num: 1.00"

Pozrite si dokumentáciu syntaxe formátovacieho reťazca.

Ak neviete presne, čo robíte,rozšírenie počtu významných číslic prostredníctvom kvantovania nie je cestou, ktorou by sme sa mali vydať; kvantizácia je záľubou účtovníckych balíkov a zvyčajne má za cieľ zaokrúhľovať výsledky na menej miesto.


1 pre odpoveď č. 2

Kvantizácia sa používa na nastavenie počtu miest, ktoré sú v skutočnosti držané v rámci hodnoty predtým, než sa konvertujú na reťazec. Ako zdôrazňuje Martijn, spravidla sa to robí redukovať počet číslic pomocou zaokrúhľovania, ale fungujerovnako dobre aj na opačnej strane. Zadaním cieľa ako desatinného čísla namiesto počtu miest môžete vykonať dve hodnoty bez toho, aby ste presne vedeli, koľko miest je v nich.

Vyzerá to o niečo menej ezotericky, ak používate namiesto desatinnej hodnoty priamo namiesto toho, aby ste ju vypočítali:

num.quantize(Decimal("0.01"))

Môžete nastaviť niektoré konštanty, aby sa skryla zložitosť:

places = [Decimal("0.1") ** n for n in range(16)]

num.quantize(places[2])