Miklix

Konvertieren einer reellen Zahl in eine Zeichenfolge mit ausschließlich Dezimalstellen in Dynamics AX 2012

Veröffentlicht: 16. Februar 2025 um 10:40:27 UTC

In diesem Artikel erkläre ich, wie man in Dynamics AX 2012 eine Gleitkommazahl in einen String umwandelt und dabei alle Dezimalstellen beibehält, einschließlich eines X++-Codebeispiels.


Diese Seite wurde maschinell aus dem Englischen übersetzt, um sie so vielen Menschen wie möglich zugänglich zu machen. Leider ist die maschinelle Übersetzung noch keine ausgereifte Technologie, so dass Fehler auftreten können. Wenn Sie es vorziehen, können Sie sich die englische Originalversion hier ansehen:

Convert a Real to String with All Decimals in Dynamics AX 2012

Die Informationen in diesem Beitrag basieren auf Dynamics AX 2012 R3. Sie sind möglicherweise auch für andere Versionen gültig, müssen es aber nicht.

Hin und wieder muss ich eine reelle Zahl in einen String umwandeln. Normalerweise reicht es aus, sie einfach an strFmt() zu übergeben, aber diese Funktion rundet immer auf zwei Dezimalstellen, was ich nicht immer möchte.

Dann gibt es die Funktion num2str(), die zwar gut funktioniert, bei der Sie aber im Voraus wissen müssen, wie viele Dezimalstellen und Zeichen Sie möchten.

Was ist, wenn Sie die Zahl einfach in eine Zeichenfolge mit allen Ziffern und Dezimalstellen umwandeln möchten? Aus irgendeinem Grund muss ich das immer googeln, weil es überraschend schwer zu machen ist und ich es so selten mache, dass ich mich normalerweise nicht mehr genau daran erinnern kann, wie es geht. In den meisten Programmiersprachen würde ich erwarten, dass Sie die reelle Zahl einfach an eine leere Zeichenfolge anhängen können, aber X++ unterstützt das nicht.

Der mit Abstand einfachste Weg, den ich dafür gefunden habe, ist die Verwendung eines .NET-Aufrufs. Auch hier gibt es mehrere Optionen, mit und ohne Optionen für erweiterte Formatierung, aber wenn Sie nur die wirklich einfache Konvertierung einer reellen Zahl in eine Zeichenfolge wünschen, reicht dies aus:

stringValue = System.Convert::ToString(realValue);

Wenn dieser Code auf dem AOS ausgeführt werden soll (z. B. in einem Batch-Job), denken Sie daran, zuerst die erforderliche Codezugriffsberechtigung zu beantragen. In diesem Fall benötigen Sie eine InteropPermission vom Typ ClrInterop, um .NET-Code aufzurufen. Das vollständige Codebeispiel würde also ungefähr so aussehen:

new InteropPermission(InteropKind::ClrInterop).assert();
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();

Beachten Sie, dass diese einfache System::Convert-Funktion das aktuelle Gebietsschema des Systems in Bezug auf Dezimalzeichen verwendet. Dies ist für Sie möglicherweise kein Problem, aber für mich, der ich in einer Gegend lebe, in der Kommas und keine Punkte als Dezimaltrennzeichen verwendet werden, kann eine weitere Verarbeitung erforderlich sein, wenn die Zeichenfolge beispielsweise in einer Datei verwendet werden muss, die von anderen Systemen gelesen werden muss.

Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Bang Christensen

Über den Autor

Mikkel Bang Christensen
Mikkel ist der Schöpfer und Eigentümer von miklix.com. Er verfügt über mehr als 20 Jahre Erfahrung als professioneller Computerprogrammierer/Softwareentwickler und ist derzeit in Vollzeit für ein großes europäisches IT-Unternehmen tätig. Wenn er nicht gerade bloggt, verbringt er seine Freizeit mit einer Vielzahl von Interessen, Hobbys und Aktivitäten, was sich bis zu einem gewissen Grad in der Vielfalt der auf dieser Website behandelten Themen widerspiegelt.