fnum

Quando vamos escrever um número via autolisp, precisamos que ele esteja formatado com separadores de milhar essas coisas…


;|formata um numero real em uma string com f casas decimais
e com separador de milhar, exemplo:
(fnum 123456789.123456789 3)|;

(defun fnum (num f / int pos fp)
(
setq int (rtos num 2 f)
pos (vl-string-search “.” int)
pos (if pos pos (strlen int))
fp (substr int (+ pos 2) (strlen int))
int (substr int 1 pos))
(
while (< (strlen fp) f) (setq fp (strcat fp “0”)))
(
repeat (/ pos 3)
(
setq int (strcat (substr int 1 ( pos 3))
“.”
(substr int ( pos 2) (strlen int)))
pos ( pos 3)))
(
vl-string-left-trim “.”
(if (zerop f) int (strcat int “,” fp))))


Com esta rotina pode-se fazer esta formatação… também serve de exemplo de como usar a função “vl-string-left-trim”

para desfazer a formatação acima, use:


;(unformatnum str):
;converte numeros do tipo 123.456.789,00 para 123456789.0

(defun unformatnum (str / v p)
(
setq v (vl-string-search “,” str)
p (vl-string-search “.” str))
(
atof
(cond ((and v p)
(
vl-string-subst “.” “,”
(while (vl-string-search “.” str)
(
setq str (vl-string-subst “” “.” str)))))
(
v (vl-string-subst “.” “,” str))
(
p str)
(
t str))))


2 comentários em “fnum”

  1. nas suas rotinas deve aparecer o (vl-load-com) ANTES de qualquer função visual lisp (que neste blog aparecem sempre em AZUL) que comece com “VL-“. isso irá carregar as extesões VL, sem elas, nada feito…

    veja o help para VL-LOAD-COM, ok?

Deixe um comentário

Carrinho de compras
Rolar para cima