Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Python zwei Dezimalstellen in Gleitkommazahlen zuverlässig beibehalten?

Wie kann ich in Python zwei Dezimalstellen in Gleitkommazahlen zuverlässig beibehalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-25 19:25:13835Durchsuche

How Can I Reliably Preserve Two Decimal Places in Floating-Point Numbers in Python?

Beibehaltung von zwei Dezimalstellen in Gleitkommazahlen

Beim Arbeiten mit Gleitkommazahlen ist es oft wünschenswert, diese auf einen bestimmten Wert zu beschränken Anzahl der Dezimalstellen. Allerdings kann die einfache Verwendung der Funktion „round()“ zu unerwarteten Ergebnissen führen, wie das folgende Verhalten zeigt:

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

Dies geschieht, weil Gleitkommazahlen Einschränkungen bei der genauen Darstellung aller Zahlen haben. Die im Speicher gespeicherten Werte stimmen nicht immer mit den angezeigten überein.

Gleitkomma-Präzision verstehen

Gleitkommazahlen mit doppelter Genauigkeit, die in Python verwendet werden, haben ungefähre Werte 16 Ziffern Genauigkeit. Das bedeutet, dass Zahlen wie 13,95 auf ähnliche Weise dargestellt werden wie:

125650429603636838/(2**53)

Bei Anwendung der Funktion „round()“ ist das Ergebnis immer noch derselbe Gleitkommawert, der intern mit denselben Einschränkungen dargestellt wird.

>>> 125650429603636838/(2**53)
13.949999999999999

Alternative Methoden zur Begrenzung von Dezimalstellen

Wenn nur zwei angezeigt werden Dezimalstellen sind unerlässlich, ziehen Sie diese Alternativen in Betracht:

  • Ganzzahlen und Skalierung verwenden: Stellen Sie Werte in Cent statt in Dollar dar und teilen Sie sie zur Konvertierung durch 100.
  • Festkomma-Dezimalzahlen verwenden: Verwenden Sie Module wie „Dezimal“, um Festkommazahlen zu speichern und zu verarbeiten spezifizierte Präzision.

Beispiele:

>>> a = 13.946
>>> print("%.2f" % a)
13.95
>>> print("{:.2f}".format(a))
13.95

# Using decimal module
>>> import decimal
>>> a = decimal.Decimal('13.946')
>>> a.quantize(decimal.Decimal('.01'))
Decimal('13.95')

Das obige ist der detaillierte Inhalt vonWie kann ich in Python zwei Dezimalstellen in Gleitkommazahlen zuverlässig beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn