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.
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:
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:
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.