Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich Dezimalobjekte in Python in JSON serialisieren und dabei die Präzision bewahren?

Wie kann ich Dezimalobjekte in Python in JSON serialisieren und dabei die Präzision bewahren?

Linda Hamilton
Freigeben: 2024-12-29 18:42:12
Original
385 Leute haben es durchsucht

How Can I Serialize Decimal Objects to JSON in Python While Preserving Precision?

Dezimalobjekte in JSON in Python serialisieren

Ein häufiges Problem tritt auf, wenn versucht wird, ein Dezimalobjekt in eine JSON-Zeichenfolge zu kodieren und dabei seine Präzision beizubehalten . Der Standardansatz der Konvertierung in eine Gleitkommazahl führt zu einem Präzisionsverlust.

Lösung 1: SimpleJSON (Python 2.1 und höher)

SimpleJSON bietet intuitive Unterstützung für Decimal-Objekte durch sein Flag „use_decimal“:

import simplejson as json

json.dumps(Decimal('3.9'), use_decimal=True)
# Output: '3.9'
Nach dem Login kopieren

Standardmäßig ist „use_decimal“ gesetzt auf True, sodass keine explizite Angabe erforderlich ist:

json.dumps(Decimal('3.9'))
# Output: '3.9'
Nach dem Login kopieren

Lösung 2: Benutzerdefinierter JSON-Encoder

Wenn SimpleJSON keine Option ist, können Sie ein benutzerdefiniertes JSON erstellen Encoder, der Decimal-Objekte verarbeitet:

import decimal
import json

class DecimalEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, decimal.Decimal):
            return float(obj)
        # Handle other object types as needed
        return super().default(obj)

json.dumps(Decimal('3.9'), cls=DecimalEncoder)
# Output: '3.8999999999999999'
Nach dem Login kopieren

Beachten Sie, dass dieser Ansatz das Decimal-Objekt in eine Gleitkommazahl umwandelt, was möglicherweise zu Präzision führt Verlust.

Das obige ist der detaillierte Inhalt vonWie kann ich Dezimalobjekte in Python in JSON serialisieren und dabei die Präzision bewahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage