O que é float em Java?


102

Eu escrevi este código:

float b = 3.6;

e eu entendo:

Erro: problema de compilação não resolvido: 
    Tipo incompatível: não é possível converter de duplo para flutuante

Por quê? Qual é a definição de float?



1
@Sneftel Isso não é uma duplicata desta pergunta. Esta pergunta pergunta por que ele não compila (para a qual a resposta é 'você deve adicionar fa ao literal'), enquanto a outra pergunta pergunta por que você deve adicionar o f. Embora estejam relacionados, não é uma duplicata.
Mark Rotteveel de

Consulte meta.stackexchange.com/questions/217401/… . As respostas à pergunta vinculada são respostas a esta pergunta.
Sneftel de

Respostas:


180

Em Java, quando você digita um número decimal como 3.6, ele é interpretado como um double. doubleé um ponto flutuante IEEE 754 de precisão de 64 bits, enquanto floaté um ponto flutuante IEEE 754 de precisão de 32 bits. Como a floaté menos preciso que a double, a conversão não pode ser realizada implicitamente.

Se quiser criar um float, você deve terminar seu número com f(ou seja:) 3.6f.

Para obter mais explicações, consulte a definição de tipos de dados primitivos do tutorial Java .


40

Faça

float b= 3.6f;

Um literal de ponto flutuante é do tipo float se for sufixado com uma letra ASCII F ou f; caso contrário, seu tipo é duplo e pode opcionalmente ser sufixado com uma letra ASCII D ou d


Existe uma maneira de verificar se uma string tem apenas valor flutuante?
MasterJoe

13

O fato é que o padrão dos números decimais é o dobro. E uma vez que double não se encaixa no float, você tem que dizer explicitamente que você definiu intencionalmente um float. Então vá com:

float b = 3.6f;

8

Em JAVA, valores como:

  1. 8,5
  2. 3,9
  3. (e assim por diante..)

É assumido como duplo e não flutuante .

Você também pode realizar um elenco para resolver o problema:

float b = (float) 3.5;

Outra solução:

float b = 3.5f;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.