sobre calculos financeiros em ms-sql server
26/02/2014
0
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
Posts
26/02/2014
Isaac Jose
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
26/02/2014
Luciano Silva
é 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 ?
26/02/2014
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
26/02/2014
Luciano Silva
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
26/02/2014
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
26/02/2014
Mariana Carvalho
26/02/2014
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
26/02/2014
Mariana Carvalho
27/02/2014
Fabiano Carvalho
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é;
Clique aqui para fazer login e interagir na Comunidade :)