Converter String em Real

Dúvidas sobre AutoLISP...

Moderador: Moderadores

Avatar do usuário
ederson
Prata 1/3
Prata 1/3
Mensagens: 414
Registrado em: Qua 21 Jul 2004 12:00:00 am
Localização: Belo Horizonte

Re: Converter String em Real

Mensagem por ederson »

Há um limite para o tamanho do real no cad/lisp. Não sei exatamente o limite.
Multiplique seu real por algo como 0.01, convertendo cm para metro, etc. Então aplique o rtos com muitas casas decimais. Deve dar certo
Ederson Ambrosio
031 8893-2947
BH-MG
Avatar do usuário
Carlos Fernando
Concreto
Concreto
Mensagens: 34
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Converter String em Real

Mensagem por Carlos Fernando »

Bom dia

De uma olhada na primeira resposta do Marcos.
Tanto atof, distof, angtof e read convertem seu texto em um número real(float), porem quando o autocad vai exibi-lo ele faz o arredondamento para mostrar no máximo 7 dígitos na sua tela, sendo que são no máximo 6 dígitos antes do separador decimal. Veja os exemplos numéricos na terceira mensagem do Laudemir, onde se pode notar essa regra. Tenha sempre em mente que o valor mostrado é uma mera exibição do autocad (o valor correto com seu devido valor decimal esta embutido).

Podemos confirmar isso de 2 maneiras:

PRIMEIRA:

Vá na linha de comando e digite:
(setq num (atof "357982.9056"))

Você verá ,na tela, o valor 357983.0 como retorno, pois como disse, foi feito o arredondamento para exibição ao usuário, as quais respeitam as regras citadas, mas acredite, a variável “num” contem o valor de 357982.9056.

Para verificar isso, basta fazer um calculo qualquer que vc desejar com a variável “num”, como:
(setq soma (+ num 0.0001))

Você vera na tela novamente o valor de 357983.0, parece que a operação não foi realizada, mas ela foi.

Para verificar basta fazer o caminho de volta,digite:
(rtos soma 2 4)
Isto retorna "357982.9057", ou seja , tanto a conversão quanto a operação matemática fizeram seu papel perfeitamente.


SEGUNDA:

Vá na linha de comando e digite:
(command "_line" '(0 0)(list (atof "357982.9056") (atof "8564432.6590"))"")
Após o desenho da linha, de o comando _id (identificação de pontos), clique no ponto extremo da reta e veja como o autocad fornece na linha de comando as coordenadas do ponto com seus valores originais sem nenhum tipo de arredondamento.


Não existe limitações quanto a exibição de textos ao usuário, porem como pode ver existe limitações de exibição de números reais. Portanto não existe arredondamento do número, o que existe é o arredondamento para exibição ao usuário.

Resumindo, faça a conversão e faça seus cálculos normalmente. Quando quiser inserir os resultados em algum local (arquivo txt,xls,caixa de dialogo, etc,) terá obrigatoriamente de transformar um numero em texto e verá que todas as operações ocorreram normalmente apesar da visualização precária dos números reais.

Abraço
Avatar do usuário
ederson
Prata 1/3
Prata 1/3
Mensagens: 414
Registrado em: Qua 21 Jul 2004 12:00:00 am
Localização: Belo Horizonte

Re: Converter String em Real

Mensagem por ederson »

Agora entendi seu problema...
(rtos (+ (read "357982.9056") (read "8564432.6590")) 2 4)
ou
(rtos (+ (atof "357982.9056") (atof "8564432.6590")) 2 4)
retornam
"8922415.5646"
Qué acredito ser o formato de numero que vc precisa
Veja que está tudo certo...
Abs!
Ederson Ambrosio
031 8893-2947
BH-MG
Responder