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

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


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

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:

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

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:

new InteropPermission(InteropKind::ClrInterop).assert();
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.

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

Mikkel Bang Christensen

Sobre o autor

Mikkel Bang 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.