Arredondamento de valores de um banco
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
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
Curtidas 0
Respostas
Vitor Alcantara
21/08/2007
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;
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;
GOSTEI 0
Ederp
21/08/2007
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 !
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 !
GOSTEI 0
Vitor Alcantara
21/08/2007
Qual é o seu banco de dados?
GOSTEI 0
Ederp
21/08/2007
SQL Server 2000
GOSTEI 0
Vitor Alcantara
21/08/2007
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.
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?
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?
GOSTEI 0
Ederp
21/08/2007
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 !
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 !
GOSTEI 0
Emerson Nascimento
21/08/2007
tente assim:
[i:d275a9bcf0]Round( (Sum(ip.Quantidadeloja + ip.QuantidadeDeposito) / ´+ IntToStr( iQtdeMes ) + ´) + 0.4, 0) As Media,´[/i:d275a9bcf0]
[i:d275a9bcf0]Round( (Sum(ip.Quantidadeloja + ip.QuantidadeDeposito) / ´+ IntToStr( iQtdeMes ) + ´) + 0.4, 0) As Media,´[/i:d275a9bcf0]
GOSTEI 0
Ederp
21/08/2007
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 !!
[i:15a138e45b]The Round Function requires 2 to 3 arguments
Incorrect Sintax near ´/´ [/i:15a138e45b]
e nem imagino o que seja isso !!
GOSTEI 0
Emerson Nascimento
21/08/2007
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.
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.
GOSTEI 0