Converter um real em string com todos os decimais no Dynamics AX 2012
Publicado: 16 de fevereiro de 2025 às 10:40:51 UTC
Neste artigo, explico como converter um número de ponto flutuante numa string preservando todos os decimais no Dynamics AX 2012, incluindo um exemplo de código X++.
Convert a Real to String with All Decimals in Dynamics AX 2012
As informações neste post são baseadas no Dynamics AX 2012 R3. Pode ou não ser válido para outras versões.
De vez em quando, preciso de converter um número real numa string. Normalmente basta passá-lo para strFmt(), mas esta função arredonda sempre para duas casas decimais, o que nem sempre é o que pretendo.
Depois, há a função num2str(), que funciona bem, mas exige que saiba antecipadamente quantos decimais e caracteres pretende.
E se apenas quiser converter o número numa string, com todos os dígitos e decimais? Por alguma razão, isto é algo que me faz sempre pesquisar no Google, porque é surpreendentemente difícil de fazer e faço-o tão raramente que geralmente não me consigo lembrar exactamente como - na maioria das linguagens de programação, esperaria que se pudesse simplesmente concatenar o real a uma string vazia, mas o X++ não o suporta.
De qualquer forma, a forma mais fácil que encontrei de o fazer é utilizando uma chamada .NET. Existem aqui também várias opções, com e sem opções para formatação avançada, mas se apenas pretende a conversão realmente simples de um real para uma string, isto será suficiente:
Se este código for executado no AOS (por exemplo, num trabalho em batch), lembre-se de solicitar primeiro a permissão de acesso ao código necessária. Neste caso, necessitará de uma InteropPermission do tipo ClrInterop para chamar o código .NET, pelo que o exemplo de código completo seria algo como isto:
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();
Tenha em atenção que esta função simples System::Convert utiliza a localidade atual do sistema em relação ao caractere de ponto decimal. Isto pode não ser um problema para si, mas para mim, que vivo numa área onde a vírgula é utilizada em vez do ponto como separador decimal, pode ser necessário um processamento adicional se a string, por exemplo, precisar de ser utilizada num ficheiro que deve ser legível por outros sistemas.