Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

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?

1 Solution

Accepted Solutions
rphpacheco
Creator III
Creator III

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!

View solution in original post

7 Replies
rphpacheco
Creator III
Creator III

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!

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Boa tarde.

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

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

AMF

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

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

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

furtado@farolbi.com.br
Anonymous
Not applicable
Author

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...

Clever_Anjos
Employee
Employee

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
Author

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)

Anonymous
Not applicable
Author

Valeu pessoal,

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