Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

José Wilson

Casas Decimais

Recommended Posts

Olá amigos, preciso de ajuda.

 

Minha tabela os valores tem seis casas decimais, o cliente precisa de um relatório em excel com duas casas.

Neste caso como estou suprimindo o restante das casas, estes valores não farão parte da somatória, com isto vai dar diferença de centavos.

Não adianta Round pois ele arredonda apenas diferente de 5 ou para baixo ou para cima.

Alguem sabe alguma solução para isto?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi , não tem , não é problema de Banco e sem de processo

 

Eu :

 

Exibiria com as duas casas no rel.

 

Somaria com as 6 para totalizar

 

Colocaria uma nota de rodapé no rel. justificando a possível diferença.

 

----

Validaria isto com o cliente se ele não concordar perguntar como proceder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, primeiro lugar muito obrigado.

Eu até gostaria de fazer desta maneira, seria o mais fácil, o problema é que faço totalização, gera apenas os itens.

É que enviei ao cliente, ele fez o total e, relatou o problema.

 

Esta complicado para resolver!!!

 

Obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei em que esta gerando o relatório, mas poderia fazer an exbição já dos dados o convert (ou cast) suprimindo as outras casas decimais e ai sim, fazer a somatória necessária.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sigo dizendo que não é problema de BD e sim operacional , os valores desprezados (truncados ou arrendodados) se acumulam e dão diferença, não vejo "mágica".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, expliquei errado na última postagem!!

 

Eu não gero totais.

A planilha consta somente os itens (vários campos).

E como esta suprimido em duas casas decimais, o cliente faz a somatória no Excel e constata a diferença.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então , se o valor fica suprimido o somatório dará diferença , convença o usuário a trabalhar com todas as casas no excel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente ele trabalha com SAP e segundo informação, ele não pode aumentar casas decimais.

Ou seja, vou ter que me virar.

Creio que terei que fazer um trabalho de Hercules!!!

Achar a diferença e ratear nos itens.

A consulta vai ficar imensa.

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente ele trabalha com SAP e segundo informação, ele não pode aumentar casas decimais.

Ou seja, vou ter que me virar.

Creio que terei que fazer um trabalho de Hercules!!!

Achar a diferença e ratear nos itens.

A consulta vai ficar imensa.

 

Obrigado pela ajuda.

 

 

declare @valor decimal(20,6)
set @valor = 123.456789
select convert(decimal(15,2),@valor) --não funcionaria pra você pois arredonda
select convert(decimal(10,2),left(@valor,len(@valor)-4)) --pega tudo menos os ultimos 4 caracteres,
--funcionará se todos os valores estiverem com as 6 casas decimais preenchidas, mesmo que com 0
select convert(decimal(10,2),left(@valor,charindex('.',@valor)+2)) --pega o valor com apenas duas casas decimais
select convert(decimal(10,2),substring(convert(varchar,@valor),1, charindex('.',@valor)+2)) --outra forma de pegar os valores sem arredondar (substitua o separador no charindex, caso seja "," no seu campo.)
Cara, se não pode arredondar, use a criatividade kkkk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Diemerson vou fazer os teste.

Como o Motta disse, não tem milage, retirando os últimos 4 digitos, no final vai dar diferença.

Creio que a única solução é fazer a totalização com 2 casas e com 6, verificar a diferença e ratear entre os itens.

Mas creio que mesmo assim dará diferença.

 

Este cliente esta a "Espera de um Milagre!!".

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem milagre ai não. São números portanto são exatos.

Se o cliente armazena 4 casas decimais, exiba o resultado com 4 casas decimais, senão, elimine as casas antes da soma e deixe claro isso em alguma mensagem no relatório.

 

Em alguns relatórios de BI que possuo trabalho desta forma, inclusive alguns com 6 casas decimais, onde regras de negócio e arredondamento caem em contradição sempre.

Compartilhar este post


Link para o post
Compartilhar em outros sites

José Wilson, esse problema é possível de resolver desde que a soma dos valores originais tenha 0000 nas terceira a sexta casa decimal. Se assim for, existe uma forma simples de resolver isso, que é truncar os valores e após distribuir a diferença entre somatórias nos valores, do maior para o menor.

Por exemplo, supondo que os valores sejam R$ 10,239845, R$ 7,983420 e R$ 0,226735. A soma original é R$ 18,45. Ao truncar os valores, temos R$ 10,23, R$ 7,98 e R$ 0,22, cuja soma é R$ 18,43. Os dois centavos que faltam são acrescentados no primeiro e no segundo valores: R$ 10,24, R$ 7,99. Pronto, a soma após o truncamento dos valores ainda permanece R$ 18,45.

No lugar de truncar também é possível arredondar, mas a soma pode ficar maior do que a soma original. Neste caso deve-se subtrair a diferença entre os maiores valores. Pelo critério de arredondar, R$ 10,239845, R$ 7,983420 e R$ 0,226735 são arredondados para R$ 10,24, R$ 7,98 e R$ 0,23, soma R$ 10,45. Coincidiu, não foi necessário ajuste. Mas se houvesse diferença bstaria substrair ou adicionar a diferença nos valores, do maior para o menor.

Mas se a soma original não termina em 0000, então é necessário conhecer o negócio para saber quais ajustes devem ser feitos durante a redução do número de casas decimais, iniciando pela soma e então ajustando os valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda assim o usuário pode reclamar do R$ 10,23 (R$ 10,239845) <> R$ 10,24.

 

Mas é uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.