Fórum Arredondamento de valores de um banco #344775

21/08/2007

0

Bom dia pessoal,

Po to com o seguinte problema, tenho que fazer uma tabela do CDE (Negociação, Compras & estoque) não sei se vc´s conhecem mais é praticamento uma planilha com alguns campos.
O problema é o seguinte eu descobri o consumo medio da empresa em 1 Mês, porem preciso passar esse valor p/ dias, mas quando divido o resultado dessa equação:

[i:eff427e122](Sum(ip.Quantidadeloja + ip.QuantidadeDeposito))/ ´+ IntToStr( iQtdeMes ) + ´) As Media,´ ); [/i:eff427e122]

Por 30, o resultado que tenho é muito pequeno do tipo 0,4 ou 0,3 preciso arredondar essa valor sempre p/ o maior numero mais proximo como nos exemplos acima preciso arredondar o valor p/ 1.

Alguém sabe uma maneira de me ajudar ?!

Valew pessoal


Ederp

Ederp

Responder

Posts

21/08/2007

Vitor Alcantara

Tenta essa função.

function Arredonda(Valor:Double):Double;
var
sStr:String;
vlr1,Vlr2:Double;
begin
sStr := FloatToStrf(valor,ffFixed,10,2);
sStr := copy(sStr,Length(sStr)-1,length(sStr));
vlr1 := strToFloat(sStr);
if vlr1 > 0 then
vlr1 := 100- vlr1;
vlr2 := StrTofloat(sStr) + vlr1/100;
result := vlr2;
end;


Responder

Gostei + 0

21/08/2007

Ederp

Po cara vlw pela ajuda, mas acho que essa função não daria certo porque não estou usando variaveis !
To fazendo os calculos direto no banco de dados, ip.Quantidadeloja e ip.QuantidadeDeposito são campos de uma tabela em Sql.

Já tentei usar o Round mas não funciona !!
Porque eu preciso do seguinte, preciso de uma media de vendas por dia, ai o resultado da equação
[i:7d2173a6ff](Sum(ip.Quantidadeloja + ip.QuantidadeDeposito)) / ´ + IntToStr( iQtdeMes ) + ´) As Media,´ );[/i:7d2173a6ff]
Da valores reais tipo 0,5 ou 0,4, então preciso arredondar esse valor p/ o maior valor mais proximo ou seja 1 !


Responder

Gostei + 0

21/08/2007

Vitor Alcantara

Qual é o seu banco de dados?


Responder

Gostei + 0

21/08/2007

Ederp

SQL Server 2000


Responder

Gostei + 0

21/08/2007

Vitor Alcantara

Caro amigo eu fiz um pequeno exemplo em Sql Server 7 para demonstrar um método de fazer isso, mais ficou meio longo mais deu certo.

Da uma olhada a idéia é a mesma.

DECLARE @QTD FLOAT
DECLARE @QTD1 FLOAT
SET @QTD = 1.9
SELECT CASE WHEN 
CONVERT (
INT ,
CONVERT(DECIMAL(10,2), 
RIGHT(STR (@QTD,10,2),2 ) ) ) <> 0 
    THEN
(CONVERT ( DECIMAL (10,2) , (100 - CONVERT (
INT ,
CONVERT(DECIMAL(10,2), 
RIGHT(STR (@QTD,10,2),2 ) ) ) ))/100) + @QTD
   ELSE
             @QTD
       END

No exemplo eu utilizei uma variavel que eu criei mais poderia ser o resultado de uma conta no banco (ficaria mais longo ainda).
Eu acho que deva ter um modo mais simplificado de fazer isso, mais no momento eu desconheço.
Por que você não cria uma tabela temporária e com a utilização de um laço/cursor você não joga os dados já tratado nela e da um select na mesma?


Responder

Gostei + 0

21/08/2007

Ederp

Rapaz a parada é tensa hein !

Mas blz vo tentar fazer isso aqui, usar a tabela temporária é um poco mais complicado pois tenho mais calculos, mas ta tranquilo se não tiver outra solução a solução será essa mesma !!

Valew velho pela Força !
Um abraço !


Responder

Gostei + 0

21/08/2007

Emerson Nascimento

tente assim:

[i:d275a9bcf0]Round( (Sum(ip.Quantidadeloja + ip.QuantidadeDeposito) / ´+ IntToStr( iQtdeMes ) + ´) + 0.4, 0) As Media,´[/i:d275a9bcf0]


Responder

Gostei + 0

21/08/2007

Ederp

Po eu tentei isso ai mas deu o seguinte erro:

[i:15a138e45b]The Round Function requires 2 to 3 arguments
Incorrect Sintax near ´/´ [/i:15a138e45b]

e nem imagino o que seja isso !!


Responder

Gostei + 0

21/08/2007

Emerson Nascimento

tem que fazer a montagem de modo que o resultado seja:

Round( [b:a0bb8feedf][color=darkblue:a0bb8feedf](Sum(ip.Quantidadeloja + ip.QuantidadeDeposito) / X ) + 0.4[/color:a0bb8feedf][/b:a0bb8feedf], [b:a0bb8feedf][color=green:a0bb8feedf]0[/color:a0bb8feedf][/b:a0bb8feedf]) As Media

talvez esteja faltando algo, visto que você não deve ter publicado a instrução completa.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar