Java Puzzles - Puzzle 2: Time for a Change

0 views
Skip to first unread message

Maurício Linhares

unread,
Feb 22, 2008, 7:25:55 AM2/22/08
to PBJUG
O primeiro já caiu, agora vamos para o segundo :)

Lembrem-se de que não é só responder, tem que dizer porque está certo
ou errado, explicando.

Puzzle 2: Time for a Change

Tom vai a loja de autopeças comprar uma vela que custa R$1,10, mas
tudo o que ele tem na carteira são notas de 2 reais. Quanto de troco
ele vai receber se pagar a conta com uma nota de 2 dólares?

Abaixo segue um programa que tenta resolver o problema. O que ele imprime?

public class Change {


public static void main(String args[]) {


System.out.println(2.00 - 1.10);


}


}


Bons códigos!

--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208

Luiz Augusto B. Florentino Filho

unread,
Feb 22, 2008, 7:34:02 AM2/22/08
to pb...@googlegroups.com
Qual o câmbio do dólar hoje????

kkkkkkkkkkkkkkkkkkkkkkkkkkkk

Maurício Linhares escreveu:

Maurício Linhares

unread,
Feb 22, 2008, 7:41:08 AM2/22/08
to pb...@googlegroups.com
Ops, dois reais :)

2008/2/22 Luiz Augusto B. Florentino Filho <luizflo...@gmail.com>:

--

Bonifacio Segundo

unread,
Feb 22, 2008, 7:52:50 AM2/22/08
to pb...@googlegroups.com
Quero ver onde diabos está a pegadinha dessa.
Não vou dar minha opinião, pois ela é a mais óbvia possível. :P

--
Bonifacio Segundo

Mauricio Linhares

unread,
Feb 22, 2008, 6:56:03 AM2/22/08
to pb...@googlegroups.com
Ouxe, responda rapaz :)

Tenha medo nao.

No dia 22/02/2008, às 10:52, "Bonifacio Segundo" <bonifaci...@gmail.co
m> escreveu:

Vinicius Ferraz

unread,
Feb 22, 2008, 7:57:15 AM2/22/08
to pb...@googlegroups.com
Foi discutido em topico anterior, ou 1.1 eh uma dízima em binário ou 0.9

2008/2/22 Mauricio Linhares <linhares...@gmail.com>:



--
Vinícius Ferraz Campos Florentino
http://www.lsd.ufcg.edu.br/~vinicius
Stefanini IT Solutions
(061) 3212 7220
(061) 8147 6464

Mauricio Linhares

unread,
Feb 22, 2008, 6:59:22 AM2/22/08
to pb...@googlegroups.com
Pois eh, falamos disso dia desses aqui.

Fabrício E. Moreira

unread,
Feb 22, 2008, 8:06:25 AM2/22/08
to pb...@googlegroups.com
Tá bom... Vou responder!!!

0,90 ...

num seria isso moço?

Sds,
Fabrício Entringer Moreira


Em 22/02/08, Vinicius Ferraz <viniciu...@gmail.com> escreveu:



--
Fabrício Entringer Moreira

Bonifacio Segundo

unread,
Feb 22, 2008, 8:07:58 AM2/22/08
to pb...@googlegroups.com
O cara da bodega vai oferecer uma balinha pro cara.

Ou então vai aumentar o preço em um bilionésimo de centavo.

0.8999999999999999

--
Bonifacio Segundo

Maurício Linhares

unread,
Feb 22, 2008, 8:08:00 AM2/22/08
to pb...@googlegroups.com
Alguma explicação pra essa sua resposta? :)

2008/2/22 Fabrício E. Moreira <mor...@gmail.com>:


> Tá bom... Vou responder!!!
>
> 0,90 ...
>
> num seria isso moço?
>
> Sds,
> Fabrício Entringer Moreira

Maurício Linhares

unread,
Feb 22, 2008, 8:10:07 AM2/22/08
to pb...@googlegroups.com
O cara da bodega (novo nome pra loja de auto-peças?) quer que dê o
resultado correto, que deveria ser 0.90, como é que eu faço um código
que dê isso em Java?

--

Rodrigo Tavares Tavares

unread,
Feb 22, 2008, 8:14:00 AM2/22/08
to pb...@googlegroups.com
Como ele considera que o número e double, não sei ao certo como ele trabalha a precisão do número, mas se es´pecificar que o numero é float o resultado fica correto.

   System.out.println(2.00F - 1.10F);

o resultado é 0.9.

Em 22/02/08, Maurício Linhares <mauricio...@gmail.com> escreveu:

Bonifacio Segundo

unread,
Feb 22, 2008, 8:19:15 AM2/22/08
to pb...@googlegroups.com
É tudo culpa dos padrões adotados pra trabalhar com ponto flutuante e da margem de erro que isso traz junto.

Math.round...

Vou continuar procurando. Espero estar chegando perto.
--
Bonifacio Segundo

Maurício Linhares

unread,
Feb 22, 2008, 8:25:37 AM2/22/08
to pb...@googlegroups.com
Hehehehe, ainda tem outro jeito fora esse dos floats :)

Lembrando que mesmo esse caso passando, floats tem o mesmo problema de
arredondamento que os doubles tem, então não é seguro trabalhar com
matemática exata usando floats ou doubles.

--

Fabrício E. Moreira

unread,
Feb 22, 2008, 8:33:10 AM2/22/08
to pb...@googlegroups.com
Bom, considerando que o resultado é 0.899999999999999 mas que o camarada não teria esse nível de troco, ele daria 0,90 mesmo   :-)

Mas é isso, agora estou pesquisando por que o valor deu 0.8999999999999   hehehehe

Muito boa essa...

Sds,
Fabrício


Em 22/02/08, Maurício Linhares <mauricio...@gmail.com> escreveu:

Marcelo Emanoel B. Diniz

unread,
Feb 22, 2008, 8:39:03 AM2/22/08
to pb...@googlegroups.com
Na verdade o correto quando se lida com dinheiro em java seria usar o bom e velho BigDecimal :)


System.out.println((new BigDecimal("2")).subtract(new BigDecimal("1.1")));




2008/2/22 Fabrício E. Moreira <mor...@gmail.com>:
Bom, considerando que o resultado é 0.899999999999999 mas que o camarada não teria esse nível de troco, ele daria 0,90 mesmo   :-)

Mas é isso, agora estou pesquisando por que o valor deu 0.8999999999999   hehehehe

Muito boa essa...

Sds,
Fabrício


Em 22/02/08, Maurício Linhares <mauricio...@gmail.com> escreveu:

Alguma explicação pra essa sua resposta? :)

2008/2/22 Fabrício E. Moreira <mor...@gmail.com>:

> Tá bom... Vou responder!!!
>
> 0,90 ...
>
> num seria isso moço?
>
> Sds,
> Fabrício Entringer Moreira



--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208






--
Marcelo Emanoel Bezerra Diniz
----------------------------------------------
Sun Certified Java Programmer 5.0

Maurício Linhares

unread,
Feb 22, 2008, 8:44:20 AM2/22/08
to pb...@googlegroups.com
Moral da história?

Sempre usem BigDecimal quando estiverem lidando com matemática exata
(ou dinheiro alheio =P).

De noite vem mais um Puzzle \o/

2008/2/22 Marcelo Emanoel B. Diniz <marcelo...@gmail.com>:


> Na verdade o correto quando se lida com dinheiro em java seria usar o bom e
> velho BigDecimal :)
>
>
> System.out.println((new BigDecimal("2")).subtract(new BigDecimal("1.1")));
>

--

Bonifacio Segundo

unread,
Feb 22, 2008, 8:52:16 AM2/22/08
to pb...@googlegroups.com
E olha que eles seriam semanais. =D

Estou gostando bastante dos tópicos. Dá pra aprender um monte de picuinha do Java.
:)

--
Bonifacio Segundo

Maurício Linhares

unread,
Feb 22, 2008, 8:54:31 AM2/22/08
to pb...@googlegroups.com
Vocês estão rápidos demais :)

Mas eu já vi alguns aqui que poderiam ser quinzenais ou mensais, hahahahaha.

--

Fabrício E. Moreira

unread,
Feb 22, 2008, 8:57:07 AM2/22/08
to pb...@googlegroups.com
Mande mais ai galera...

2008/2/22, Bonifacio Segundo <bonifaci...@gmail.com>:



--
Fabrício Entringer Moreira

Marcelo Emanoel B. Diniz

unread,
Feb 22, 2008, 8:57:28 AM2/22/08
to pb...@googlegroups.com
Lembrando que se você colocar o mesmo código apenas retirando as aspas... td volta ao mesmo problema de precisão... até maior eu diria....

System.out.println((new BigDecimal(2)).subtract(new BigDecimal(1.1)));

o resultado seria isso:

0.899999999999999911182158029987476766109466552734375

o problema aí é que o bigdecimal ia simplesmente colocar o valor interno pra o double que serviu de parâmetro na inicialização. aí ia cair no problema anterior... com mais casas decimais....



2008/2/22 Marcelo Emanoel B. Diniz <marcelo...@gmail.com>:
Na verdade o correto quando se lida com dinheiro em java seria usar o bom e velho BigDecimal :)

Fabrício E. Moreira

unread,
Feb 22, 2008, 9:21:46 AM2/22/08
to pb...@googlegroups.com
Cara, o que é esse "java puzzle" ?

Eu não conheço...

Sds,
Fabrício

Em 22/02/08, Maurício Linhares <mauricio...@gmail.com> escreveu:

Rodrigo C. L.

unread,
Feb 22, 2008, 9:34:11 AM2/22/08
to pb...@googlegroups.com
gostaria de agradecer à lista sobre esta preciosa dica sobre bigdecimal. Sempre bati a cabeça na mesa por causa das precisões e nunca entendia a utilidade do bigdecimal se ele não era preciso. Tivesse eu sabido isso antes..........
--
||
|| Rodrigo Cerqueira Lopes
|| Estudante de computação na UFCG
|| Também em rodr...@lcc.ufcg.edu.br
||
|| "Sofisticado - 1. Falsificado, contrafeito, adulterado. (...)"
|| Aurélio Ed. Eletrônica v3.0
||

Rodrigo C. L.

unread,
Feb 22, 2008, 9:35:00 AM2/22/08
to pb...@googlegroups.com
utilidade em relação a representações exatas, esqueci de dizer
Reply all
Reply to author
Forward
0 new messages