Miklix

Converter um real em string com todos os decimais no Dynamics AX 2012

Publicado: 16 de fevereiro de 2025 às 10:40:51 UTC
Última atualização: 12 de janeiro de 2026 às 08:50:55 UTC

Neste artigo, explico como converter um número de vírgula flutuante numa cadeia de caracteres preservando todos os decimais no Dynamics AX 2012, incluindo um exemplo de código X++.


Esta página foi traduzida automaticamente do inglês para a tornar acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, pelo que podem ocorrer erros. Se preferir, pode ver a versão original em inglês aqui:

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

A informação neste artigo baseia-se no Dynamics AX 2012 R3. Pode ou não ser válida para outras versões.

De vez em quando, preciso de converter um número real numa sequência. Normalmente, basta passar para strFmt(), mas essa função arredonda sempre para dois decimais, o que nem sempre é o que quero.

Depois há a função num2str(), que funciona bem, mas exige que saibas antecipadamente quantos decimais e caracteres queres.

E se quiser apenas que o número seja convertido para uma cadeia, com todos os dígitos e decimais? Por alguma razão, isto é algo que me faz sempre pesquisar no Google porque é surpreendentemente obscuro e faço-o tão raramente que normalmente não me lembro exatamente como – na maioria das linguagens de programação, esperaria que se pudesse simplesmente concatenar o real numa cadeia vazia, mas o X++ não suporta isso.

De qualquer forma, a forma mais fácil que encontrei para fazer isto é usando uma chamada .NET. Existem várias opções aqui também, com e sem opções de formatação avançada, mas se só quiser a conversão muito simples de um real para uma string, isto será suficiente:

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

Se este código for para ser executado no AOS (por exemplo, num trabalho em lote), lembre-se de afirmar primeiro a permissão de acesso necessária ao código. Neste caso, vais precisar de uma InteropPermission do tipo ClrInterop para chamar código .NET, por isso o exemplo completo do código seria algo assim:

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

Tenha em atenção que esta simples função System::Convert utiliza a localização atual do sistema em relação ao carácter de ponto decimal. Isto pode não ser um problema para si, mas para mim, que vivo numa área onde a vírgula é usada em vez de ponto como separador decimal, pode exigir processamento adicional se, por exemplo, a cadeia tiver de ser usada num ficheiro que deve ser legível por outros sistemas.

Leitura adicional

Se gostou deste post, também pode gostar destas sugestões:


Partilhar no BlueskyPartilhar no FacebookPartilhar no LinkedInPartilhar no TumblrPartilhar em XPartilhar no LinkedInFixar no Pinterest

Mikkel Christensen

Sobre o autor

Mikkel Christensen
Mikkel é o criador e proprietário do miklix.com. Tem mais de 20 anos de experiência como programador informático/desenvolvedor de software profissional e trabalha atualmente a tempo inteiro para uma grande empresa europeia de TI. Quando não está a escrever no blogue, dedica o seu tempo livre a um vasto leque de interesses, passatempos e actividades, que podem, em certa medida, refletir-se na variedade de tópicos abordados neste sítio Web.