java - Que tipo de dados (double, float) eu devo usar ao representar uma temperatura? - Stack Overflow em Português
Minha dúvida é em relação ao uso do Double e do Float em exercícios de Java ao ter que declarar uma temperatura (escala Celsius). Qual deles devo usar nesse caso?
Eu declarei como Double, porém a professora ao corrigir o exercício em classe acabou usando o Float.
Sei que entre esses dois dados a diferença é a precisão que eles apresentam, mas o que ainda não consegui entender é quando cada um deles, e para quais fins o Double e o Float são usados.
java tipagem float double
editada 10/09/18 às 16:19
perguntada 7/09/18 às 19:00
32522 medalhas de prata1010 medalhas de bronze
você pode encontrar uma ótima explicação aqui. – Gabriel Gonçalves 7/09/18 às 19:08
Eu acho que vale a pena perguntar para a professora porque float está "errado" nesse caso. A princípio, temperaturas não exigem uma precisão tão grande que um float não possa suportar. A menos que haja algum outro detalhe no exercício que "obrigue" a usar double (ou que faça ele ser a melhor escolha). Mas parece que vc está usando os wrappers (Double e Float, com letra maiúscula), pode ser que isso tenha a ver com a resposta. Se quiser editar a pergunta colocando mais detalhes, como o trecho de código por exemplo, quem sabe podemos dar mais detalhes sobre este caso específico – hkotsubo 7/09/18 às 20:07
E depois de perguntar pra professora, comente aqui o que ela disse, que é pra gente ver se tem fundamento mesmo. Não duvidando dela, lógico, mas só pra ficar do lado "seguro". Já vi muito professor (de faculdade renomada, inclusive) que claramente só leu teoria, mas nunca teve que fazer nada "real", pelo tipo de aula dada. – Bacco♦ 7/09/18 às 21:46
@ramaral É mesmo, que distração a minha. Mesmo assim, qualquer um dos tipos serviria e continua sendo estranho que um deles esteja "errado" e precise ser "corrigido". A menos que haja algum detalhe no exercício que "obrigue" a usar float. – hkotsubo 8/09/18 às 11:14
@hkotsubo Nada obriga, no entanto há justificação para escolher float conforme explicado na resposta do Manieiro e do Victor. – ramaral 8/09/18 às 12:32
Não existe um tipo específico adequado, para este caso alguns podem ser usados.
Na verdade se for criar tipos para lidar com essas temperaturas e for usar uma infraestrutura sofisticada para representá-los, o tipo interno que guardará os números importam pouco. Poderia usar algumas estratégias e depende do que espera realizar. Pode até que ser que um simples float resolva fácil.
Se for usar um tipo genérico para representar pode até usar um int, mas provavelmente o mais fácil seja usar um float que já tem a parte decimal. Com um int teria que fazer sempre uma divisão para pegar a parte decimal, fazer contas para adequar a escala que estiver usando, tem que ter vários cuidados e não deve valer a pena pra uso básico e para uso mais sofisticado acho que a solução anterior é melhor.
Nada impede usar um double, mas acho exagero para este tipo de coisa. O float economiza memória e tem precisão mais que suficiente pra algo simples assim. Não dá para dizer que está errado, mas não seria a primeira escolha.
A diferença entre eles é só a precisão mesmo, o que obviamente faz o mais preciso ser maior (8 bytes contra 4). Não confundir com exatidão.
Se tivesse no enunciado para usar algo que ocupa menos espaço, poderia até pensarem outras coisas, ainda mais se tiver exigência de exatidão. Me parece que nada disso é exigido, aí float é melhor em uso real, mas dá para argumentar que o double não faz mal a não ser ocupar memória a toa, que muda pouco na maioria dos casos.
Neste caso duvido que o BigDecimal seja necessário, mas só você pode responder se deve ter exatidão além da precisão que o float já dá. Veja mais em Qual a forma correta de usar os tipos float, double e decimal?.
editada 11/09/18 às 11:59
respondida 7/09/18 às 20:43
Deixa eu copiar algumas coisas que postei nesta resposta:
Pois bem, o double tem uma capacidade de armazenagem maior do que o float tanto no expoente quanto na mantissa (fraction). Assim sendo, todo valor float pode ser representado por um double, mas o contrário não é verdadeiro. Logo, a pergunta a ser feita é se o float oferece precisão suficiente.
O float tem 23 bits para representar o fraction. Isso é suficiente para armazenar números inteiros mantendo o expoent em 0 nos valores entre 0 até 224 - 1 = 16777215. Para representar o 16777217, ele perde o bit 1 menos significativo arredondando para 16777216.
Isso significa que números com precisão de 0.5 pode ser armazenados até 8388607.5. Com precisão de 0.25, é até 4194303.75. Mantendo-se uma precisão suficiente para representar 3 casas após o ponto decimal (com precisão 1/1024), dá para representar números até 16383.999.
Representar números que representam temperaturas com precisão de milésimos de graus até uma temperatura de mais de 16000 graus, mostra que o float tem precisão suficiente para isso. Assim sendo, tanto o float quanto o double podem ser utilizados.
editada 8/09/18 às 16:12
respondida 7/09/18 às 21:06
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag java tipagem float double ou faça sua própria pergunta.