Miklix

Convertire un valore reale in una stringa con tutti i decimali in Dynamics AX 2012

Pubblicato: 16 febbraio 2025 alle ore 10:40:35 UTC

In questo articolo spiego come convertire un numero in virgola mobile in una stringa mantenendo tutti i decimali in Dynamics AX 2012, incluso un esempio di codice X++.


Questa pagina è stata tradotta automaticamente dall'inglese per renderla accessibile al maggior numero di persone possibile. Purtroppo, la traduzione automatica non è ancora una tecnologia perfezionata, quindi possono verificarsi degli errori. Se preferite, potete consultare la versione originale in inglese qui:

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

Le informazioni contenute in questo post si basano su Dynamics AX 2012 R3. Potrebbero essere valide o meno per altre versioni.

Ogni tanto, ho bisogno di convertire un numero reale in una stringa. Di solito, è sufficiente passarlo a strFmt(), ma quella funzione arrotonda sempre a due decimali, il che non è sempre ciò che voglio.

Poi c'è la funzione num2str(), che funziona bene, ma richiede di sapere in anticipo quanti decimali e caratteri si desiderano.

E se volessi solo convertire il numero in una stringa, con tutte le cifre e i decimali? Per qualche ragione, questa è una cosa che mi fa sempre cercare su Google perché è sorprendentemente oscuro da fare e lo faccio così raramente che di solito non ricordo esattamente come - nella maggior parte dei linguaggi di programmazione, mi aspetterei che si potesse semplicemente concatenare il reale a una stringa vuota, ma X++ non lo supporta.

In ogni caso, il modo più semplice che ho trovato per farlo è usare una chiamata .NET. Ci sono anche diverse opzioni qui, con e senza opzioni per la formattazione avanzata, ma se vuoi solo la conversione davvero semplice di un reale in una stringa, questo sarà sufficiente:

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

Se questo codice deve essere eseguito sull'AOS (ad esempio in un batch job), ricorda di asserire prima il permesso di accesso al codice necessario. In questo caso avrai bisogno di un InteropPermission di tipo ClrInterop per chiamare il codice .NET, quindi l'esempio di codice completo dovrebbe essere simile a questo:

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

Tieni presente che questa semplice funzione System::Convert usa le impostazioni locali correnti del sistema per quanto riguarda il carattere punto decimale. Questo potrebbe non essere un problema per te, ma per me che vivo in un'area in cui si usa la virgola anziché il punto come separatore decimale, potrebbe richiedere un'ulteriore elaborazione se la stringa, ad esempio, deve essere usata in un file che deve essere leggibile da altri sistemi.

Condividi su BlueskyCondividi su FacebookCondividi su LinkedInCondividi su TumblrCondividi su XCondividi su LinkedInAggiungi su Pinterest

Mikkel Bang Christensen

Sull'autore

Mikkel Bang Christensen
Mikkel è il creatore e proprietario di miklix.com. Ha oltre 20 anni di esperienza come programmatore di computer/sviluppatore di software ed è attualmente impiegato a tempo pieno in una grande azienda IT europea. Quando non scrive sul blog, dedica il suo tempo libero a una vasta gamma di interessi, hobby e attività, che in qualche modo si riflettono nella varietà di argomenti trattati in questo sito.