cancelar
Mostrando resultados para 
Pesquisar então 
Você quer dizer: 
cancelar
Mostrando resultados para 
Pesquisar então 
Você quer dizer: 
Bibliotecas & Objetos
Sobre as bibliotecas do Archicad e BIMcloud, sua gestão e migração, objetos e outros componentes de biblioteca, etc
SOLUCIONADO!

Arredondar Área em Objeto

leonardotalarico
Impulsionador(a)

Boa noite!

Preciso arredondar os valores para calcular a área dentro do objeto gdl. 

O objeto é bem simples, é uma forma quadrilátera, (A x B), então o resultado deve ser arredondado para cima quando a terceira casa depois da vírgula for >= 5, por exemplo: 3,005 = 3,01.

Eu consegui arredondar os valores usando o STR{2}, mas como ele transforma o valor em uma string não consigo calcular depois, a menos que transforme em um número real novamente. 

Gostaria de saber se tem alguma forma de arredondar o resultado antes de transformar em String.

 

Operating system used: Windows

Leonardo Talarico
https://www.linkedin.com/in/leonardotalaricosp
1 SOLUÇÃO ACEITA

Soluções aceitas
Solução
leonardotalarico
Impulsionador(a)

Como no GDL não tem arredondamento de números reais (ao menos não encontrei isso em lugar nenhum) eu criei meu próprio arredondamento, não sei se é a melhor opção mas é um cálculo que permite checar a terceira casa após a vírgula.

Primeiro eu crio uma variável, depois eu uso o arredondamento de inteiros (round_int) e depois subtraio o valor que eu estou arredondando do valor arredondado, como eu utilizei o parâmetro A, ficou dessa forma:

ar = A = round_int(A)   

Dessa forma eu tenho a variável "ar" sendo calculada pelo valor de "A" menos o valor de "A" arredondado para um inteiro. Só para ilustrar, se A for 3,015 e eu subtrair o valor inteiro (3,00) resta 0,015.

Depois eu crio uma condição de checagem com um IF THEN ELSE , exemplo:

if ar = 0.00 then
    ar = 0.00
else
    ar = ar
endif
Dessa forma  ele vai chegar o resultado da subtração, se for 0.00 ele mantém 0.00 caso contrário ele retorna a variável. No caso de 3,015 - 3,00 o resultado é 0,015

Então como posso ter 10 variáveis de milésimos (terceira casa após a vírgula) eu crio outras 10 variáveis: ar1, ar2,ar3 .... ar10.

ar1 = 0.01
ar2 = 0.02
ar3 = 0.03
ar4 = 0.04
ar5 = 0.05
ar6 = 0.06
ar7 = 0.07
ar8 = 0.08
ar9 = 0.09
ar10 = 0.1
 
então quando eu checar o ar ele vai substituir o valor por uma das variáveis que eu criei acima.
if ar = 0.015 then
    ar = ar2
else
    ar = ar
endif
 
Nesse exemplo acima caso o ar seja 0.015 ele substitui pela variável ar2 que valo 0.02 fazendo assim o arredondamento.
 
Para usar de forma efetiva isso é preciso criar essas variáveis para todos os parâmetros que se deseja arredondar.
 
Por fim eu posso criar uma variável para juntar o valor inteiro + o valor decimal arredondado
nFinal =  (round_int(A) + ar)
nFinal = 3 + 0,02 (3 é o inteiro de 3,015 e 0,02 é o arredondamento de 0,015).
Leonardo Talarico
https://www.linkedin.com/in/leonardotalaricosp

Exibir solução no post original

2 RESPOSTAS 2
leonardotalarico
Impulsionador(a)

Nem acredito, consegui!

Leonardo Talarico
https://www.linkedin.com/in/leonardotalaricosp
Solução
leonardotalarico
Impulsionador(a)

Como no GDL não tem arredondamento de números reais (ao menos não encontrei isso em lugar nenhum) eu criei meu próprio arredondamento, não sei se é a melhor opção mas é um cálculo que permite checar a terceira casa após a vírgula.

Primeiro eu crio uma variável, depois eu uso o arredondamento de inteiros (round_int) e depois subtraio o valor que eu estou arredondando do valor arredondado, como eu utilizei o parâmetro A, ficou dessa forma:

ar = A = round_int(A)   

Dessa forma eu tenho a variável "ar" sendo calculada pelo valor de "A" menos o valor de "A" arredondado para um inteiro. Só para ilustrar, se A for 3,015 e eu subtrair o valor inteiro (3,00) resta 0,015.

Depois eu crio uma condição de checagem com um IF THEN ELSE , exemplo:

if ar = 0.00 then
    ar = 0.00
else
    ar = ar
endif
Dessa forma  ele vai chegar o resultado da subtração, se for 0.00 ele mantém 0.00 caso contrário ele retorna a variável. No caso de 3,015 - 3,00 o resultado é 0,015

Então como posso ter 10 variáveis de milésimos (terceira casa após a vírgula) eu crio outras 10 variáveis: ar1, ar2,ar3 .... ar10.

ar1 = 0.01
ar2 = 0.02
ar3 = 0.03
ar4 = 0.04
ar5 = 0.05
ar6 = 0.06
ar7 = 0.07
ar8 = 0.08
ar9 = 0.09
ar10 = 0.1
 
então quando eu checar o ar ele vai substituir o valor por uma das variáveis que eu criei acima.
if ar = 0.015 then
    ar = ar2
else
    ar = ar
endif
 
Nesse exemplo acima caso o ar seja 0.015 ele substitui pela variável ar2 que valo 0.02 fazendo assim o arredondamento.
 
Para usar de forma efetiva isso é preciso criar essas variáveis para todos os parâmetros que se deseja arredondar.
 
Por fim eu posso criar uma variável para juntar o valor inteiro + o valor decimal arredondado
nFinal =  (round_int(A) + ar)
nFinal = 3 + 0,02 (3 é o inteiro de 3,015 e 0,02 é o arredondamento de 0,015).
Leonardo Talarico
https://www.linkedin.com/in/leonardotalaricosp

Setup info provided by author