sobre calculos financeiros em ms-sql server
bom dia galera,
seguinte estou precisando passar uma funçao de delphi para o ms-sql que calcula o valor presente da parcela.
acontece que
quando faço o seguinte calculo da 1
select 37/30
deveria dar o resultado 1,233333333333333....
mas dá um
dessa forma ... o calculo nao funfa
declare @dataatual datetime
declare @Vencto datetime
declare @valor money
declare @Taxa decimal(18,8)
set @taxa = 5
set @dataatual = '2014-02-26'
set @Vencto = '2014-01-20'
set @valor = 1000
declare @DifData int
declare @Indice float(53)
declare @fator float(53)
declare @fatdia numeric(38,28)
Set @DifData = DATEDIFF(dd, @Vencto, @dataatual )
If @DifData > 0 begin
Set @indice = 1+(@Taxa / 100)
set @fatdia = convert(numeric(38,28), @DifData / 30)
set @Fator = 1 / power(@indice,@fatdia)
set @fator = 1/@fator
set @valor = @valor * @fator
select @difdata, @indice, @valor, @fator, @fatdia
End
obrigado
Luciano
seguinte estou precisando passar uma funçao de delphi para o ms-sql que calcula o valor presente da parcela.
acontece que
quando faço o seguinte calculo da 1
select 37/30
deveria dar o resultado 1,233333333333333....
mas dá um
dessa forma ... o calculo nao funfa
declare @dataatual datetime
declare @Vencto datetime
declare @valor money
declare @Taxa decimal(18,8)
set @taxa = 5
set @dataatual = '2014-02-26'
set @Vencto = '2014-01-20'
set @valor = 1000
declare @DifData int
declare @Indice float(53)
declare @fator float(53)
declare @fatdia numeric(38,28)
Set @DifData = DATEDIFF(dd, @Vencto, @dataatual )
If @DifData > 0 begin
Set @indice = 1+(@Taxa / 100)
set @fatdia = convert(numeric(38,28), @DifData / 30)
set @Fator = 1 / power(@indice,@fatdia)
set @fator = 1/@fator
set @valor = @valor * @fator
select @difdata, @indice, @valor, @fator, @fatdia
End
obrigado
Luciano
Luciano Silva
Curtidas 0
Respostas
Isaac Jose
26/02/2014
bom dia ...
cara não entendi muito bem o resultado em si deve dar 1,2333 mais esta dando 1 redondo é isso?
se for atribua um decimal (18,3) para o campo que recebera o resultado ...
espero que funcione rsr..
att isaac
cara não entendi muito bem o resultado em si deve dar 1,2333 mais esta dando 1 redondo é isso?
se for atribua um decimal (18,3) para o campo que recebera o resultado ...
espero que funcione rsr..
att isaac
GOSTEI 0
Luciano Silva
26/02/2014
primeiro lugar, obrigado por ter me respondido..
é isso mesmo o erro,
select 37/30 está retornando 1
mesmo se nao atribuir a nenhuma variavel ...
ja mudei a variavel para float, decimal, numeric com precisoes bem altas .. mesmo assim .. retorna 1
o que sera ?
é isso mesmo o erro,
select 37/30 está retornando 1
mesmo se nao atribuir a nenhuma variavel ...
ja mudei a variavel para float, decimal, numeric com precisoes bem altas .. mesmo assim .. retorna 1
o que sera ?
GOSTEI 0
Alex Lekao
26/02/2014
Oi Luciano, bom dia!!!
Tente da seguinte forma, usando a sugestao do Isaac.
ou assim.
veja se da certo e posta ai.
acredito que vc sempre precisara colocar .0 ou ponto alguma coisa para que ele considere como decimal.
Abraco.
Alex - Lekao
Tente da seguinte forma, usando a sugestao do Isaac.
select convert(decimal(18,3),37/30.0)
ou assim.
select 37/30.0
veja se da certo e posta ai.
acredito que vc sempre precisara colocar .0 ou ponto alguma coisa para que ele considere como decimal.
Abraco.
Alex - Lekao
GOSTEI 0
Luciano Silva
26/02/2014
Méééééééééééstree .. enfim te encontrei ...
deu certo
no meu calculo eu dei uma adaptada
set @fatdia = convert(float(53), @DifData / 30.0)
funcionou na hora...
obrigado
se precisar de algo pode contar comigo
luciano@lckconsultoria.com.br
deu certo
no meu calculo eu dei uma adaptada
set @fatdia = convert(float(53), @DifData / 30.0)
funcionou na hora...
obrigado
se precisar de algo pode contar comigo
luciano@lckconsultoria.com.br
GOSTEI 0
Alex Lekao
26/02/2014
kkkkkk...
blz... cara... mas to longe de ser mestre nisso viu... rsrsr
so tive uns probleminhas com calculos usando numeros inteiros, e descobri que tinha que quebra-lo...
com isso dava a entender que se ele fizer um calculo com inteiros ele vai considera-los inteiros.
o que fiz foi refrercar a memoria com os testes que postei como exemplo... rsrsr
Fico feliz em ter podido ajudar.
se precisar de algo posta ai, tamo aqui para ajudar.
se eu precisar de algo tbm, eu nao tenho vergonha, peco mesmo. kkkkkk
Abraco.
Alex - Lekao
blz... cara... mas to longe de ser mestre nisso viu... rsrsr
so tive uns probleminhas com calculos usando numeros inteiros, e descobri que tinha que quebra-lo...
com isso dava a entender que se ele fizer um calculo com inteiros ele vai considera-los inteiros.
o que fiz foi refrercar a memoria com os testes que postei como exemplo... rsrsr
Fico feliz em ter podido ajudar.
se precisar de algo posta ai, tamo aqui para ajudar.
se eu precisar de algo tbm, eu nao tenho vergonha, peco mesmo. kkkkkk
Abraco.
Alex - Lekao
GOSTEI 0
Mariana Carvalho
26/02/2014
Alex, me desculpe pela pergunta, mas em que momento deve utilizado calculos usando o banco de dados?
GOSTEI 0
Alex Lekao
26/02/2014
Oi Mariana,
Desculpe mas nao entendi bem.
pelo que tenho percebido o SQL Server qdo vc usa um numero inteiro para calcular, ele converte para Inteiro o resultado.
Entao os calculos que tenho feito, pelo menos alguns deles estou tendo que fazer assim, qdo tenho que pasar valores fixos, tenho que colocar o ponto zero para ele manter.
Nao sei se pode ser alguma coisas especifica de configuracao aqui no meu banco ou se eh especificamente do sql server.
Nao sei se respondi o que vc estava querendo, me desculpe se nao.
Abraco.
Alex - Lekao
Desculpe mas nao entendi bem.
pelo que tenho percebido o SQL Server qdo vc usa um numero inteiro para calcular, ele converte para Inteiro o resultado.
Entao os calculos que tenho feito, pelo menos alguns deles estou tendo que fazer assim, qdo tenho que pasar valores fixos, tenho que colocar o ponto zero para ele manter.
Nao sei se pode ser alguma coisas especifica de configuracao aqui no meu banco ou se eh especificamente do sql server.
Nao sei se respondi o que vc estava querendo, me desculpe se nao.
Abraco.
Alex - Lekao
Alex, me desculpe pela pergunta, mas em que momento deve utilizado calculos usando o banco de dados?
GOSTEI 0
Mariana Carvalho
26/02/2014
é justamente isso, pq essa conversão no proprio banco? a linguagem não pode fazer isso?
GOSTEI 0
Fabiano Carvalho
26/02/2014
é justamente isso, pq essa conversão no proprio banco? a linguagem não pode fazer isso?
Sim.
Pode ser feito na aplicação, desde que o calculo seja feita na aplicação.
Isso no SQL é padrão se voce dividir inteiro por inteiro será retornado inteiro, pois ele não converte para float,decimal a menos que seja usado cast ou convert;
Exemplo
select cast(1 as float) / cast(3 as float)
Irá retornar 0,3333333
Até;
GOSTEI 0