Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
jeanlipes
Contributor II

Arredondamento de valores ímpares.

Boa tarde pessoal...

Tenho uma tabela com vários valores entre eles alguns valores de centavos então dando ímpares, mais preciso transformar estes valores em par.

Na tabela acima tenho que mudar os centavos, de 09 para 10, de 39 para 40....

Alguém sabe de alguma função ou formula que pode resolver este problema?

Tags (1)
1 Solution

Accepted Solutions
rphpacheco
Contributor III

Re: Arredondamento de valores ímpares.

Podes fazer da seguinte maneira:

If(Mod(Right(Preço,2),2) = 0, Preço, Preço + 0.01)as Preço

Segue um exemplo para melhor entendimento

Edit:

Obs: Esta fórmula está considerando os valores no formato com duas casas decimais após a vírgula. Caso não esteja, terás que fazer a conversão

Abraço!

7 Replies
rphpacheco
Contributor III

Re: Arredondamento de valores ímpares.

Podes fazer da seguinte maneira:

If(Mod(Right(Preço,2),2) = 0, Preço, Preço + 0.01)as Preço

Segue um exemplo para melhor entendimento

Edit:

Obs: Esta fórmula está considerando os valores no formato com duas casas decimais após a vírgula. Caso não esteja, terás que fazer a conversão

Abraço!

MVP
MVP

Re: Arredondamento de valores ímpares.

Boa tarde.

Segue um exemplo de como fazer.  Deve ter outras formas....

117,16017,160Par
217,09017,100Impar

AMF

MVP
MVP

Re: Arredondamento de valores ímpares.

    if(isnull(odd(frac(Valor)*100)),'Impar','Par')     as Par_Impar,

    Valor + if(isnull(odd(frac(Valor)*100)),0.01,0)    as Valor_Par;

jeanlipes
Contributor II

Re: Arredondamento de valores ímpares.

Fiz assim na expressão da tabela:

If(Mod(Right(Replace(Num(Left(sum(DISTINCT VAR_VALOR),5),'#.##0,00'),',',','),2),2) = 0 or

Mod(Right(Replace(Num(Left(sum(DISTINCT VAR_VALOR),5),'#.##0,00'),',',','),2),2) = 2 or

Mod(Right(Replace(Num(Left(sum(DISTINCT VAR_VALOR),5),'#.##0,00'),',',','),2),2) = 4 or

Mod(Right(Replace(Num(Left(sum(DISTINCT VAR_VALOR),5),'#.##0,00'),',',','),2),2) = 6 or

Mod(Right(Replace(Num(Left(sum(DISTINCT VAR_VALOR),5),'#.##0,00'),',',','),2),2) = 8, sum(DISTINCT VAR_VALOR), sum(DISTINCT VAR_VALOR) + 0.01)   

Mais não está funcionando, pois na conta que eu faço ele traz varias decimais, e se eu pegar só a segunda decimal igual na primeira linha da imagem abaixo o valor vai ser 17,15(Ímpar) mais ela foi arredondada pelo sistema para 17,16, e como a formula entendeu que é um Ímpar ele somou +0.01 que vai ficar como 17,17 que é Ímpar...

Employee
Employee

Re: Arredondamento de valores ímpares.

Tente usar o round simples

LOAD round(F1,0.02) as F1 INLINE [

    F1

    "17,16"

    "17,09"

    "17,39"

    "17,16"

    "17,09"

    "17,39"

    "17,16"

    "17,10"

    "17,39"

    "14,76"

];

Not applicable

Re: Arredondamento de valores ímpares.

Utilize a função Round(num, 0.02) para arredondar ou Ceil(num, 0.02) para arredondar para cima.

Exemplos:

Round(17.35,0.02) ==> 17.36 ou 17.34 (não sei tem que testar, mas retornar par)

Ceil(17.35, 0.02) ==> 17.36 (certeza pois arredonda para cima de 0.02 em 0.02)

jeanlipes
Contributor II

Re: Arredondamento de valores ímpares.

Valeu pessoal,

Obrigado pela ajuda, fiz funcionar com o exemplo que postado pelo ...