/ / C'è un modo più leggibile o pitone per formattare un decimale in 2 punti? - python, decimale, arrotondamento

C'è un modo più leggibile o Python per formattare un decimale a 2 posti? - python, decimale, arrotondamento

Cosa diavolo sta succedendo con la sintassi per correggere un decimale in due punti?

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

C'è un modo migliore che non sembri così esoterica in un colpo d'occhio? "Quantizzazione di un decimale" suona come technobabble da un episodio di Star Trek!

risposte:

6 per risposta № 1

Usa la formattazione della stringa:

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

Il format() funzione applica la formattazione della stringa ai valori. Decimal() gli oggetti possono essere formattati come valori in virgola mobile.

Puoi anche usare questo per interpolare il valore decimale formattato in una stringa più grande:

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

Vedere il formattare la documentazione sulla sintassi della stringa.

A meno che tu non sappia esattamente cosa stai facendo,espandere il numero di cifre significative attraverso la quantizzazione non è la strada da percorrere; la quantizzazione è la proprietà dei pacchetti contabili e normalmente ha lo scopo di arrotondare i risultati a meno cifre significative invece.


1 per risposta № 2

Quantize è usato per impostare il numero di posti che sono effettivamente detenuti internamente all'interno del valore, prima che venga convertito in una stringa. Come sottolinea Martijn, di solito ciò viene fatto ridurre il numero di cifre tramite arrotondamento, ma funzionaaltrettanto bene andando dall'altra parte. Specificando il target come numero decimale piuttosto che un numero di posizioni, è possibile far corrispondere due valori senza sapere specificamente quanti posti ci sono in essi.

Sembra un po 'meno esoterico se si utilizza direttamente un valore decimale invece di provare a calcolarlo:

num.quantize(Decimal("0.01"))

Puoi impostare alcune costanti per nascondere la complessità:

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

num.quantize(places[2])