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
Converter String em Real
Moderador: Moderadores
- ederson
- Prata 1/3
- Mensagens: 414
- Registrado em: Qua 21 Jul 2004 12:00:00 am
- Localização: Belo Horizonte
Re: Converter String em Real
Ederson Ambrosio
031 8893-2947
BH-MG
031 8893-2947
BH-MG
- Carlos Fernando
- Concreto
- Mensagens: 34
- Registrado em: Sex 29 Dez 2017 4:17:25 pm
Re: Converter String em Real
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
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
- ederson
- Prata 1/3
- Mensagens: 414
- Registrado em: Qua 21 Jul 2004 12:00:00 am
- Localização: Belo Horizonte
Re: Converter String em Real
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!
(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
031 8893-2947
BH-MG