Calculo em Java

19 respostas
Z

Pessoal como que eu faria para utilizar essa fórmula em java ?

Esta solução esta correta ?

public double getJurosAcruado(final int diasUteis, final double taxaRecompra,
								 final double valorNotional) throws CalculoException{
		double jurosAcruado = 0.0d;
		try{
			jurosAcruado = (NumericHelper.subtract(taxaRecompra,100) + 1);
			jurosAcruado = new Double(Math.pow(jurosAcruado,NumericHelper.subtract(diasUteis,252))).doubleValue();
			jurosAcruado = NumericHelper.multiply(jurosAcruado,valorNotional);
			jurosAcruado = jurosAcruado - valorNotional;
		}catch (Exception e) {
			throw new CalculoException("Erro ao calcular o juros acruado " , e);
		}		
		return 	jurosAcruado;
	}

Agradeço a ajuda.

19 Respostas

B

Ola,

parece correto sim, se esta classe NumericHelper fizer tudo o que se propoe… só um errim bobo, na linha 6, ao invés de vc subtrair vc tem que multiplicar.

P

Vc não sabe fazer contas, apelou pra um codigo pego em algum google da vida e quer saber se esta correto?

IMHO não precisa de uma NumericHelper . Se vc quer saber se o código funciona utilize uma suite de testes automatizados (como via Junit – cujo tutorial vc encontra aqui no Guj).

R

Olá,

Só mais uma questão: normalmente as contas envolvendo cálculo de accrual envolve muitas casas decimais, e muita precisão. Então, se eu fosse você trocaria o double por BigDecimal, só pra não perder uns centavos por aí.

[]´s

K

Opa, So para reforçar, sou mais um a favor de BigDecimal para calculo.

Z

peczenyj:
Vc não sabe fazer contas, apelou pra um codigo pego em algum google da vida e quer saber se esta correto?

IMHO não precisa de uma NumericHelper . Se vc quer saber se o código funciona utilize uma suite de testes automatizados (como via Junit – cujo tutorial vc encontra aqui no Guj).

Cara vc é retardado ? Como vc pode afimar que eu peguei esse código na net ? Eu não quero saber se o código esta correto, e sim se as instruções que eu usei estão.

E este "IMHO " que dizer burro ?

Z

peczenyj:
Vc não sabe fazer contas, apelou pra um codigo pego em algum google da vida e quer saber se esta correto?

IMHO não precisa de uma NumericHelper . Se vc quer saber se o código funciona utilize uma suite de testes automatizados (como via Junit – cujo tutorial vc encontra aqui no Guj).

E outra seu idiota, NumericHelper é uma classe útil de minha autoria que eu utilizo para realizar calculos simples como (+, / , *, -).

Z

rdgc:
Como foi dito, use BigDecimal, mas use para tudo, troque os tipos primitivos por ela.

Tbm acho que vc não precisa da NumericHelper, com o BigDecimal vc faz tudo. Divida sua fórmula em partes, fica mais simples.

flws!

blz… Substitui aonde eu pude.

public BigDecimal getJurosAcruado(final int diasUteis, final double taxaRecompra,
								 final BigDecimal valorNotional) throws CalculoException{
		BigDecimal jurosAcruado = new BigDecimal(0.0d);
		try{
			jurosAcruado = new BigDecimal(NumericHelper.subtract(taxaRecompra,100) + 1);
			
			jurosAcruado = new BigDecimal(Math.pow(jurosAcruado.doubleValue(),NumericHelper.subtract(diasUteis,252)));
			jurosAcruado = jurosAcruado.multiply(valorNotional);
			jurosAcruado = jurosAcruado.subtract(valorNotional);
			
		}catch (Exception e) {
			throw new CalculoException("Erro ao calcular o juros acruado " , e);
		}		
		return 	jurosAcruado;
	}
Z

Menos mal…

S

zezinho:
Pessoal como que eu faria para utilizar essa fórmula em java ?

Esta solução esta correta ?

Não. Vc está usando subtract onde deveria usar divisão.

Nota: Quando trabalhando com dinheiro não usem BigDecimal usem o padrão Money.
simplifica muito a sua vida

public Money getJurosAcruado(final int diasUteis, final double taxaRecompra,
	 final Money valorNotional) throws CalculoException{

  try{
    BigDecimal factor = new BigDecimal ( Math.pow(taxaRecompra / 100d +1 ,diasUteis/252d ))
    return  valorNotional.multiply(factor).subtract(valorNotional);
   }catch (Exception e) {
	throw new CalculoException("Erro ao calcular o juros acruado " , e);
    }		
}
T

sergiotaborda:
Nota: Quando trabalhando com dinheiro não usem BigDecimal usem o padrão Money.
simplifica muito a sua vida

Complementando o post do Sérgio:
http://www.martinfowler.com/ap2/quantity.html

R

Para o cálculo em si, acredito que não há como fugir de BigDecimal. O Money ao meu ver será um wrapper do BigDecimal, com alguma lógica a mais inerente ao dominio dele, como conversão de moeda, por exemplo.

Ah propósito, o padrão money em si não conheço, Money é um exemplo do padrão Value Object.

[]´s

T

rodrigo_gomes:
Ah propósito, o padrão money em si não conheço, Money é um exemplo do padrão Value Object.

[]´s


Não estou questionando o que você disse, mas Money é um exemplo direto do padrão Quantity e indireto de Value Object.

Money >> Quantity >> Value Object

Dê uma olhada no link que passei acima.

Z

sergiotaborda:
zezinho:
Pessoal como que eu faria para utilizar essa fórmula em java ?

Esta solução esta correta ?

Não. Vc está usando subtract onde deveria usar divisão.

Nota: Quando trabalhando com dinheiro não usem BigDecimal usem o padrão Money.
simplifica muito a sua vida

public Money getJurosAcruado(final int diasUteis, final double taxaRecompra,
	 final Money valorNotional) throws CalculoException{

  try{
    BigDecimal factor = new BigDecimal ( Math.pow(taxaRecompra / 100d +1 ,diasUteis/252d ))
    return  valorNotional.multiply(factor).subtract(valorNotional);
   }catch (Exception e) {
	throw new CalculoException("Erro ao calcular o juros acruado " , e);
    }		
}

Blz cara valeu, agora a questão do Money não será possível pois infelizmente o cliente ainda usa o java 1.3. :x

T

Money é um padrão, e não um recurso atrelado a uma versão da plataforma Java.

Mais uma vez, leia: http://www.martinfowler.com/ap2/quantity.html

Z

tnaires:
Money é um padrão, e não um recurso atrelado a uma versão da plataforma Java.

Mais uma vez, leia: http://www.martinfowler.com/ap2/quantity.html

Entendi, valeu mais uma vez.

S

rodrigo_gomes:
sergiotaborda:


Nota: Quando trabalhando com dinheiro não usem BigDecimal usem o padrão Money.
simplifica muito a sua vida

Para o cálculo em si, acredito que não há como fugir de BigDecimal. O Money ao meu ver será um wrapper do BigDecimal, com alguma lógica a mais inerente ao dominio dele, como conversão de moeda, por exemplo.

Tem sim como fugir do BigDecimal. A implementação de Money não tem que usar BigDecimal. Money não é um wrapper de BigDecimal. É a especialização do padrão Quantity. ( está associado a uma unidade : a moeda)

Mais detalhes em aqui

E

" E outra seu idiota, NumericHelper é uma classe útil de minha autoria que eu utilizo para realizar calculos simples como (+, / , *, -)."

Qual a utilidade de uma classe que realiza cálculos já oferecidos por operadores primitivos? Se for algum padrão de projeto, por favor, me expliquem…Me parece algo bastante inútil…

R

Como foi dito, use BigDecimal, mas use para tudo, troque os tipos primitivos por ela.

Tbm acho que vc não precisa da NumericHelper, com o BigDecimal vc faz tudo. Divida sua fórmula em partes, fica mais simples.

flws!

R

zezinho:
peczenyj:
Vc não sabe fazer contas, apelou pra um codigo pego em algum google da vida e quer saber se esta correto?

IMHO não precisa de uma NumericHelper . Se vc quer saber se o código funciona utilize uma suite de testes automatizados (como via Junit – cujo tutorial vc encontra aqui no Guj).

Cara vc é retardado ? Como vc pode afimar que eu peguei esse código na net ? Eu não quero saber se o código esta correto, e sim se as instruções que eu usei estão.

E este "IMHO " que dizer burro ?

Fiquem calmos…

IMHO http://pt.wikipedia.org/wiki/IMHO

Criado 11 de março de 2008
Ultima resposta 11 de mar. de 2008
Respostas 19
Participantes 9