<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Valores monetários"]]></title>
		<link>http://www.guj.com.br/posts/list/5.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Valores monetários"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Valores monetários</title>
				<description><![CDATA[ Me surgiu essa dúvida: Em um sistema de automação comercial, qual a melhor forma de representar um valor monetário?? Como um objeto ou como um tipo de dados  primitivo ???]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/747893/valores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/747893/valores-monetarios
</link>
				<pubDate><![CDATA[Tue, 22 Sep 2009 14:41:54]]> GMT</pubDate>
				<author><![CDATA[ LuksS]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ voce esta fazendo sem banco de dados??<br /> <br /> bom.. ai vai depender da necessidade do sistema.. a vantagem de se fazer uma classe para isso é que voce estara apto a disponibilizar para ela como por exemplo, conversão de moeda, de forma semântica e correta... mais se for só pra resolver o problema de manter a quantia de dinheiro de um obj Conta por exemplo, só um atributo float já resolve qualquer quantia plausível...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/748027/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/748027/revalores-monetarios
</link>
				<pubDate><![CDATA[Tue, 22 Sep 2009 16:19:59]]> GMT</pubDate>
				<author><![CDATA[ Danieldt]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ O melhor é usar um Double]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/748038/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/748038/revalores-monetarios
</link>
				<pubDate><![CDATA[Tue, 22 Sep 2009 16:31:43]]> GMT</pubDate>
				<author><![CDATA[ kikostyle]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ Obrigado! Com suas dicas eu conclui que o melhor no meu caso seria usar um BigDecimal p/ encapsular o valor e facilitar o arredondamento!<br /> vlw]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/748158/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/748158/revalores-monetarios
</link>
				<pubDate><![CDATA[Tue, 22 Sep 2009 18:57:42]]> GMT</pubDate>
				<author><![CDATA[ LuksS]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ [quote=LuksS]Obrigado! Com suas dicas eu conclui que o melhor no meu caso seria usar um BigDecimal p/ encapsular o valor e facilitar o arredondamento!<br /> vlw[/quote]<br /> <br /> O melhor de tudo é usar o padrão [url=http://sergiotaborda.wordpress.com/java/patterns/money/]Money[/url]. Vc não trabalha com numeros decimais e por isso não tem perda por arredondamento.<br /> Money é a forma de fato para trabalhar com dinheiro o resto é gambiarra.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/748391/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/748391/revalores-monetarios
</link>
				<pubDate><![CDATA[Wed, 23 Sep 2009 09:51:20]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ Do seguinte trecho do artigo<br /> <br /> [quote]Do ponto de vista técnico ha muito tempo que é sabido que tipos numéricos como double ou float não são suficientes para elaborar algoritmos que lidam com dinheiro e, em Java, nos vemos obrigados a usar BigDecimal. Contudo a classe BigDecimal tem as suas peculiaridades que acabam atrapalhando mais do que ajudam porque embora forneçam mecanismos de calculo, não fornece um mecanismo de controle de unidades.[/quote]<br /> <br /> Eu posso utilizar a classe BigDecimal sem medo de estar cometendo gambiarras caso eu Não necessite de conversões monetárias??]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/749031/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/749031/revalores-monetarios
</link>
				<pubDate><![CDATA[Wed, 23 Sep 2009 19:46:51]]> GMT</pubDate>
				<author><![CDATA[ LuksS]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ [quote=LuksS]Do seguinte trecho do artigo<br /> <br /> [quote]Do ponto de vista técnico ha muito tempo que é sabido que tipos numéricos como double ou float não são suficientes para elaborar algoritmos que lidam com dinheiro e, em Java, nos vemos obrigados a usar BigDecimal. Contudo a classe BigDecimal tem as suas peculiaridades que acabam atrapalhando mais do que ajudam porque embora forneçam mecanismos de calculo, não fornece um mecanismo de controle de unidades.[/quote]<br /> <br /> Eu posso utilizar a classe BigDecimal sem medo de estar cometendo gambiarras caso eu Não necessite de conversões monetárias??[/quote]<br /> <br /> Nas escala de pior para melhor opção temos<br /> <br /> double e float<br /> BigDecimal<br /> Ratio<br /> Money<br /> Money (usando ratio internamente)<br /> <br /> BigDecimal é melhor que double pq vc pode representar potencias negativas de 10 sem problemas (ou seja, centavos)<br /> mas ainda é um decimal. Vc será tentado a escrever 1/3 do mesmo jeito e terá uma dizima infinita do mesmo jeito...<br /> só que uma dizima infinita é irrepresentável, mesmo com bigDecimal. E pior que isso, esse valor não é uma quantidade monetária <br /> aceitável. 1/3 dá 0,33 + 0,33 + 0,33 + 0,01 centavos Esta é a divisão correta de dinheiro por um numero inteiro.<br /> <br /> Bom, então ai vc usa Ratio. Ratio é um padrão para numeros em que vc utiliza um valor para numerador e outro para denominador nunca fazendo a divisão real até ao fim do calculo. assim 1/ 3 * 3 = 1 sempre. Vc não consegue isso co double ou float nem bigdecimal.<br /> <br /> Mas ratio é para numeros, não dinheiro. Não ha associação à moeda. <br /> Ai vc usa Money. Preferivelmene com ratio internamente para ter calculos mais exatos (ou seja, fazendo menos divisões)<br /> <br /> Mesmo quando a moeda é sempre a mesma Money tem vantagem por sem mais fortemente tipado. Numeros podem ser qq coisa, Money só pode ser dinheiro. um metodo chamado calculaJuro(Money) é auto-explicativo. Isto melhora imensamente a clareza do seu codigo e impede erros.<br /> <br /> enfim, o ponto não é se é gambiarra ou não. nenhum deles é gamb. O ponto é seguir o principio que diz que vc deve sempre usar o melhor tipo possivel.  É mesmo principio que obriga vc a usar numeros em vez de string e string em vez de array de char...<br /> <br /> O tipo "dinheiro" quando não é bem modelado causa muitos problemas porque vc começa a perder centavos sem perceber e isso causa prejuizo enorme porque em 100 transações diárias (que é pouco) vc perde 1 unidade. em 356 dias vc perde 356 unidades, e assim vai.<br /> <br /> O golpe final do padrão money sobre os outros é o conhecimento do dominio.<br /> Porque o objeto conhece a moeda, ele sabe quantas casas decimais existem na moeda. (nem todas as moedas têm 2 casas decimais como o real, o yen, por exemplo, não tem nenhuma).  Isto permite que ele converta qq decimal em um inteiro e depois de volta.<br /> Então quando vc cria o objeto vc passa um valor decimal (utilizando uma String e nunca um double) , mas ele faz as contas com inteiros - muito mais rápido e sem problemas de arredondamento. No fim ele converte de volta para um decimal.<br /> <br /> Dê uma olhada [url=http://middleheaven.wordpress.com/toolboxes/quantidades-e-medidas/money-toolbox/]como se pode usar o money[/url] e um exemplo de[url=http://www.google.com/codesearch/p?hl=pt-BR&sa=N&cd=10&ct=rc#fxMOVdP_UqM/trunk/src/main/java/org/middleheaven/quantity/money/Money.java&q=money%20package:http://middleheaven%5C.googlecode%5C.com&l=13] implementação[/url] usando o padrão Ratio.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/749195/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/749195/revalores-monetarios
</link>
				<pubDate><![CDATA[Thu, 24 Sep 2009 09:41:40]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ Estou usando o padrão money! Mas surgiu outra dúvida. E quanto a porcentagens? Existe algum padrão para representá-los?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/751907/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/751907/revalores-monetarios
</link>
				<pubDate><![CDATA[Mon, 28 Sep 2009 20:22:03]]> GMT</pubDate>
				<author><![CDATA[ LuksS]]></author>
			</item>
			<item>
				<title>Re:Valores monetários</title>
				<description><![CDATA[ [quote=LuksS]Estou usando o padrão money! Mas surgiu outra dúvida. E quanto a porcentagens? Existe algum padrão para representá-los?[/quote]<br /> <br /> Vc pode usar o padrão Ratio que falei antes. Já que todas as percentagens são numeros divididos por 100. 88% = 88/100<br /> e 88,99% = 8899/10000 . Co ratio vc sempre trabalha com numeros inteiros durante o máximo de tempo possivel delegando a adivisão final apenas para o fim do calculo. É a forma que se usa na matemática onde se usam frações para não calcular a divisão explicitamente.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/139018/757869/revalores-monetarios
</guid>
				<link>http://www.guj.com.br/prepost/139018/757869/revalores-monetarios
</link>
				<pubDate><![CDATA[Thu, 8 Oct 2009 09:31:18]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
	</channel>
</rss>
