Classe alternativa a BigDecimal e Double para representar e operar valores monetários

public final class Dinheiro
extends java.lang.Object

Classe alternativa a BigDecimal e Double para representar e operar valores monetários entre [-9223372036854775808.99 e 9223372036854775807.99]. Baixe a biblioteca gratuitamente aqui: download

Version:
1.00 feito em 31/08/2012
Author:
Marcelo Junior

Constructor Summary
Dinheiro(java.lang.String valor)
Recebe a String.Class de um valor monetário no formato “0.00”. ex.: new Dinheiro(“9.99”); [valor mínimo="-9223372036854775808.99"], [valor máximo=“9223372036854775807.99”]

Method Summary
Dinheiro divide(int quantidade)
Recebe uma quantidade int maior que zero e divide a this retornando um objeto Dinheiro.Class com o que sobrou na operação. capture o retorno para não perder dinheiro. ex.: Dinheiro d = new Dinheiro("1.99"); Dinheiro sobra = d.divide(3);
boolean equals(java.lang.Object obj)
Sobrescreve equals(Object.Class); de Object.Class para retornar um boolean com a igualdade do contéudo entre objetos Dinheiro.Class. ex.: Dinheiro d1 = new Dinheiro("1.99"); Dinheiro d2 = new Dinheiro("1.99"); boolean b = d1.equals(d2);
void multiplica(int quantidade)
Recebe uma quantidade int maior que zero e multiplica a this. ex.: Dinheiro d = new Dinheiro("1.99"); d.multiplica(3);
void soma(java.lang.String valor)
Recebe a String.Class de um valor monetário no formato “0.00” e soma a this.
void subtrai(java.lang.String valor)
Recebe a String.Class de um valor monetário no formato “0.00” e subtrai a this.
java.lang.String toString()
Sobrescreve toString(); de Object.Class para retornar a String de um objeto Dinheiro.Class no formato “0.00”. use para imprimir o valor ou criar um Double.Class. ex.: Double.valueOf(new Dinheiro("9.99").toString());

Utilizar strings em diversas operações matemáticas irá gerar impactos de escalabilidade…
Imagine quantas conversões você terá que fazer entre strings e números para cálculos, colocando isso em escala gigante…

o padrão Money já faz bem o trabalho.

Tem toda razão. Tentei contornar isso usando String apenas na criação de objetos Dinheiro.class

Ainda não conheço esse padrão, vou pesquisar depois.

vlw.

A idéia de compartilhar foi boa, infelizmente já tem a solução da classe Money. E também o fato de que trabalhar com cálculos em String é roubada. [=

Mas desanima não, é assim que a gente começa a ter idéias de se criar coisas melhores. :wink:

Concordo! Por isso mesmo a Dinheiro.class não faz calculos com String, apenas cria objetos recebendo uma String. Os calculos são feitos com long, short, e int. Pesquisei sobre o padrão Money e notei três diferenças.

Padrão Money: converte String para número a todo momento, para deixar o valor imutável.
Dinheiro.class: converte String para número uma única vez a cada nova instância, e usa encapsulamento para deixar o valor imutável.

Padrão Money: aceita moedas com diferentes padrões nas casas destinadas a centavos.
Dinheiro.class: aceita moedas com padrão de duas casas destinadas a centavos

Padrão Money: retorna um array nas divisões, simulando parcelamento.
Dinheiro.class: retorna um novo objeto com o resto da divisão.

Depois estudarei mais sobre o Padrão Adapter, e criarei um adaptador entre a interface da Dinheiro.class e a do Padrão Money.

Concerteza! Sem falar que essa biblioteca reforçou meus conhecimentos sobre os principios OO e lógica.
Abraço.