Converter String em Real

Dúvidas sobre AutoLISP...

Moderador: Moderadores

Avatar do usuário
laudemir
Prata 2/3
Prata 2/3
Mensagens: 532
Registrado em: Qui 29 Mar 2007 12:00:00 am
Contato:

Converter String em Real

Mensagem por laudemir »

Como converter String em Real

Sei que poderiamos usar Atof ou Distof

Porem os numeros estão com 4 ou 5 casa decimais
e preciso de que fiquem assim

(setq num "1745.9126")
(atof num ) ou (distof num 2)

retorna :
1745.91

Mas gostaria de :
1745.9126

Verifiquei os Sets LUNITS, LUPREC, AUPREC ETC.....


No aguaro
"As respostas dos problemas, geralmente são mais simples que pensamos"
maketreis@itelefonica.com.br
Veja outros artigos http://lautolisp.blogspot.com/
Estou iniciando em blog, mas ja é um começo....
Avatar do usuário
admin
Administrador
Administrador
Mensagens: 621
Registrado em: Sex 28 Nov 2003 11:00:00 pm
Localização: Itu / SP
Contato:

Mensagem por admin »

Na verdade ocorre um arrendondamento NA EXIBIÇÃO quando os valores estão em reais:

exemplo:
[lsp]
(setq num1 "1745.9999")

(setq num2 "0.0001")

(setq num1_conv (atof num1)) ; = mostra 1746.0 mas na verdade é: 1745.9999
(setq num2_conv (atof num2)) ; = 0.0001

; mesmo assim:
(+ num1_conv num2_conv) ; retorna 1746.0
[/lsp]

Pode usar o valor que lhe é fornecido para calculos sem problemas... agora, se precisar passar este dado para outro local ( prompt, arquivo texto , alert, dcl, etc...) na converão deve informar a quantidade de casas decimais. Exemplo:

[lsp](rtos num1_conv 2 4) ; onde 2 é formato decimal e 4 é a quatindade de casas decimais[/lsp]

Não sei se deu pra entender!
Marcos Mendes de Almeida
mmalbr@gmail.com
Avatar do usuário
laudemir
Prata 2/3
Prata 2/3
Mensagens: 532
Registrado em: Qui 29 Mar 2007 12:00:00 am
Contato:

Mensagem por laudemir »

Imagine que as string sejam pontos, e tenho um arquivo de strings assim:
x = "17.3265" y ="20.5698"

para tranformar em pontos, que sejam capturados por
(SSGET "X" (list (cons 0 "circle" )(cons 10 (list (atof x) (atof y)))))

ou seja o ponto existe no DWG, mas o SSGET não encontra pois ele arredonda
"As respostas dos problemas, geralmente são mais simples que pensamos"
maketreis@itelefonica.com.br
Veja outros artigos http://lautolisp.blogspot.com/
Estou iniciando em blog, mas ja é um começ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

Mensagem por ederson »

... E se usar (read "17.3265"). Não testeis
Ederson Ambrosio
031 8893-2947
BH-MG
Avatar do usuário
admin
Administrador
Administrador
Mensagens: 621
Registrado em: Sex 28 Nov 2003 11:00:00 pm
Localização: Itu / SP
Contato:

Mensagem por admin »

Posso estar enganado.. mas creio que realmente não irá conseguir capturar por ssget com coordenadas da forma como esta fazendo... consegui fazer isto a uns 7 anos atras de uma forma diferente mas não me lembro como!
Editado pela última vez por admin em Sex 31 Out 2008 5:29:07 pm, em um total de 1 vez.
Marcos Mendes de Almeida
mmalbr@gmail.com
Avatar do usuário
laudemir
Prata 2/3
Prata 2/3
Mensagens: 532
Registrado em: Qui 29 Mar 2007 12:00:00 am
Contato:

Mensagem por laudemir »

bom veja isso

Command: (atof "6.4264")
6.4264
Command: (atof "26.4264")
26.4264
Command: (atof "326.4264")
326.426
Command: (atof "4326.4264")
4326.43
Command: (atof "54326.4264")
54326.4
Command: (atof "654326.4264")
654326.0
"As respostas dos problemas, geralmente são mais simples que pensamos"
maketreis@itelefonica.com.br
Veja outros artigos http://lautolisp.blogspot.com/
Estou iniciando em blog, mas ja é um começo....
Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton »

ja falei aqui o porque que os numeros reais em computação causam tantos inconvenientes

e esse laudemir, me parece ser o caso de um problema de arredondamento

pois em computação (2.3) e (2.3+1e-10) podem ser o mesmo número ou não
dependendo quantas casas decimais o sistema pode representar e qua o intervalo entre cada numero reresentável

entao, sugiro o seguinte, admita um "erro" nas coordenadas do seu circulo
exemplo: qual a ordem de grandeza do seu desenho?
se é arquitetura, é provável que use centimetros, logo, qualquer coisa 0.001 não fará diferença no seu projeto

se é engenharia de estradas, usa metros e qualquer coisa 0.01 não fará cócegas no seu desenho

se é mecanica usa milimetros, e qualquer coisa 1e-5 não trará problemas

capicci?

experimente:
(ssget x (atof x)
y (atof y)
erro 0.001)
[lsp](ssget "X" (list '(0 . "CIRCLE")
'(-4 . "<AND")
'(-4 . ">=,>=")
(list 10 (- x erro) (- y erro))
'(-4 . "<=,<=")
(list 10 (+ x erro) (+ y erro))
'(-4 . "AND>")
))[/lsp]

isso procura um circulo cujo centro esteja nas coordenadas X,Y admitindo um erro de 0.001 pra mais ou pra menos nas coordenadasvai de vc definir o que seria um erro aceitável....
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!
Avatar do usuário
laudemir
Prata 2/3
Prata 2/3
Mensagens: 532
Registrado em: Qui 29 Mar 2007 12:00:00 am
Contato:

Mensagem por laudemir »

Ok neyton obrigado......
"As respostas dos problemas, geralmente são mais simples que pensamos"
maketreis@itelefonica.com.br
Veja outros artigos http://lautolisp.blogspot.com/
Estou iniciando em blog, mas ja é um começo....
Avatar do usuário
hugopaulo
Master
Master
Mensagens: 1873
Registrado em: Dom 29 Fev 2004 12:00:00 am

Mensagem por hugopaulo »

Embora esse seja um tópico antigo (nem tanto) vou colocar uma dica sobre conversão de "string" para real.

Se vc não precisa da precisão ou o arquivo de onde vc lê os números em texto já está com a precisão desejada o mais rápido é usar a função READ.

Exemplo:

;; Variável já foi lida de um arquivo

(setq VarReal (read Var1))
;; se a variável Var1 tiver "12.3456" - texto a VarReal terá 12.3456 - real

;; Variável atribuída na rotina
(setq Param1 "27.3333" ; texto
(setq Var2 (read Param1)) ; Var2 vai conter 27.3333 - real


Os tópicos anteriores já explanaram outras considerações a respeito. T+
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem
Mouralex
Novato
Novato
Mensagens: 1
Registrado em: Ter 07 Mai 2019 9:15:29 pm

Re: Converter String em Real

Mensagem por Mouralex »

Preciso converter string para reais. No exemplo acima funciona para números pequenos, no meu caso preciso converter para reais números de coordenadas utm com até 4 casas decimais. Tipo 357982.9056 e 8564432.6590. Usando atof ou read não retorna o valor completo.

Sds
Responder