Miklix

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

Publicado: 16 de fevereiro de 2025 às 10:40:49 UTC

Neste artigo, explico como converter um número de ponto flutuante em uma 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 torná-la acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, portanto, podem ocorrer erros. Se preferir, você pode visualizar 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. Podem ou não ser válidas para outras versões.

De vez em quando, preciso converter um número real para uma string. Normalmente, apenas passá-lo para strFmt() é o suficiente, mas essa função sempre arredonda para duas casas decimais, o que nem sempre é o que eu quero.

Depois, há a função num2str(), que funciona bem, mas exige que você saiba com antecedência quantos decimais e caracteres deseja.

E se você quiser apenas converter o número para uma string, com todos os dígitos e decimais? Por alguma razão, isso é algo que sempre me faz pesquisar no Google porque é surpreendentemente obscuro de fazer e eu faço isso tão raramente que geralmente não consigo lembrar exatamente como - na maioria das linguagens de programação, eu esperaria que você pudesse apenas concatenar o real para uma string vazia, mas o X++ não suporta isso.

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

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

Se esse código for executado no AOS (por exemplo, em um trabalho em lote), lembre-se de declarar a permissão de acesso ao código necessária primeiro. Nesse caso, você precisará de uma InteropPermission do tipo ClrInterop para chamar o código .NET, então o exemplo de código completo seria algo como isto:

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

Esteja ciente de que esta função simples System::Convert usa a localidade atual do sistema com relação ao caractere de ponto decimal. Isso pode não ser um problema para você, mas para mim, que moro em uma área onde a vírgula é usada em vez do ponto como separador decimal, pode exigir processamento adicional se a string, por exemplo, precisar ser usada em um arquivo que deve ser legível por outros sistemas.

Compartilhe no BlueskyCompartilhe no FacebookCompartilhe no LinkedInCompartilhe no TumblrCompartilhar em XCompartilhe no LinkedInFixar no Pinterest

Mikkel Bang Christensen

Sobre o autor

Mikkel Bang Christensen
Mikkel é o criador e proprietário do miklix.com. Ele tem mais de 20 anos de experiência como programador de computador/desenvolvedor de software profissional e atualmente trabalha em tempo integral para uma grande empresa europeia de TI. Quando não está blogando, ele dedica seu tempo livre a uma grande variedade de interesses, hobbies e atividades, o que pode, até certo ponto, refletir-se na variedade de tópicos abordados neste site.