sobre calculos financeiros em ms-sql server

26/02/2014

0

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
Luciano Silva

Luciano Silva

Responder

Posts

26/02/2014

Isaac Jose

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

Responder

26/02/2014

Luciano Silva

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 ?
Responder

26/02/2014

Alex Lekao

Oi Luciano, bom dia!!!

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
Responder

26/02/2014

Luciano Silva

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
Responder

26/02/2014

Alex Lekao

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
Responder

26/02/2014

Mariana Carvalho

Alex, me desculpe pela pergunta, mas em que momento deve utilizado calculos usando o banco de dados?
Responder

26/02/2014

Alex Lekao

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

Alex, me desculpe pela pergunta, mas em que momento deve utilizado calculos usando o banco de dados?
Responder

26/02/2014

Mariana Carvalho

é justamente isso, pq essa conversão no proprio banco? a linguagem não pode fazer isso?
Responder

27/02/2014

Fabiano Carvalho

é 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é;
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar