Arredondamento de valores de um banco

Delphi

21/08/2007

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

Curtidas 0

Respostas

Vitor Alcantara

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;


GOSTEI 0
Ederp

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 !


GOSTEI 0
Vitor Alcantara

Vitor Alcantara

21/08/2007

Qual é o seu banco de dados?


GOSTEI 0
Ederp

Ederp

21/08/2007

SQL Server 2000


GOSTEI 0
Vitor Alcantara

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.

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

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 !


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

21/08/2007

tente assim:

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


GOSTEI 0
Ederp

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


GOSTEI 0
Emerson Nascimento

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.


GOSTEI 0
POSTAR