1. doubletipo

Java fornece o doubletipo para trabalhar com números reais (fracionários). Ele ocupa 8 bytesem memória (o dobro do inttipo) e pode armazenar valores no intervalo de a . Para comparação: o tipo pode armazenar um valor no intervalo de a .-1.7*10308+1.7*10308int-2*109+2*109

Nos números reais, a parte fracionária é escrita após a vírgula. Por exemplo, 123,456 ou 2,5 ou 100,00 ou 0,01. Quando os computadores lidam com esses números, nós os chamamos de números de ponto flutuante .

A propósito, além do doubletipo, também temos o floattipo (que tem apenas 4 bytes de tamanho). Seu nome vem do ponto flutuante . E o nome doublevem de double float . A doubleé duas vezes maior que a float: 8 bytesversus 4. Também é chamado de número de ponto flutuante de precisão dupla .


2. Criando um doubletipo

O tipo double é usado para armazenar números reais. Para criar uma variável no código que pode armazenar números reais, você precisa usar uma instrução como esta:

double name;
Criando um doubletipo

Onde nome é o nome da variável. Exemplos:

Declaração Descrição
double price;
Uma variável real priceé criada
double weight;
Uma variável real weighté criada
double lightSpeed;
Uma variável real lightSpeedé criada

Assim como no inttipo, você pode usar atalhos para criar várias doublevariáveis ​​simultaneamente:

double name 1, name 2, name 3;
Criando várias doublevariáveis

E até mesmo atribuir imediatamente valores a eles:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Criando e inicializando várias doublevariáveis

Exemplos:

Declaração Observação
double price = 5.0;
As lojas variáveis5.0
double weight = 2;
As lojas variáveis2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Atribuindo inteiros e números reais

Seria ruim se números inteiros pudessem ser atribuídos apenas a intvariáveis ​​e números reais - apenas a doublevariáveis. Queremos ser capazes de converter entre os dois tipos de números. E Java fornece essa capacidade.

Primeiro, números reais e inteiros podem ser atribuídos a doublevariáveis. Ao atribuir números inteiros, eles são simplesmente convertidos em números reais. Claro, alguma precisão pode ser perdida no processo.

Declaração Observação
double price = 5.0;
As lojas variáveis5.0
double weight = 2;
As lojas variáveis2.0
int t = 1000;
double x =  t * t;

As xlojas variáveis1000000.0

Em segundo lugar, se um inteiro e um número real estiverem envolvidos em alguma expressão, então o inteiro é primeiro convertido em um número real e só então a operação com o outro número real é executada.

Declaração Observação
int t = 1000;
double x = t * 5.0;

As xlojas variáveis5000.0
System.out.println(5 * 2);
O número 10será exibido na tela
System.out.println(5 * 2.0);
O número 10.0será exibido na tela

E, finalmente, também é possível atribuir números reais a intvariáveis. Quando fazemos isso, a parte fracionária do número real é descartada — o número é arredondado para o número inteiro mais próximo.

Além disso, o compilador exige que o programador documente explicitamente o que está acontecendo (para ter certeza de que outros programadores entendam que a parte fracionária está sendo descartada). Em geral, essa conversão se parece com isso no código:

integer_variable = (int)(real_number);
Atribuindo um número real a uma intvariável

Exemplos:

Declaração Observação
int x = (int)(5.5);
As xlojas variáveis5
double a = 5.999;
int x = (int)(a);
As xlojas variáveis5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
As xlojas variáveis11


4. Dividindo inteiros e números reais em Java

Ao dividir um inteiro por um inteiro, o resto é sempre descartado. Como então podemos dividir 5por 2para obter 2.5?

A princípio, parece que a opção correta é:

double d = 5 / 2;

Mas não é tão simples. O problema aqui é que a máquina Java primeiro calcula o valor de 5 / 2e só então atribui o resultado à dvariável. E a 5 / 2operação é divisão inteira. Esse meio d conterá 2ou, para ser mais preciso,2.0

A solução correta é escrever pelo menos um dos números envolvidos na divisão como um número real (ou seja, com ponto decimal):

double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;

Em cada uma das expressões, d conterá2.5

Mas e se estivermos trabalhando com variáveis? E se tivermos um código como este?:

int a = 5;
int b = 2;
double d = a / b;

Há uma solução engenhosa (e óbvia) aqui — forçar a máquina Java a converter variáveis ​​em números reais multiplicando-as por um como um número real ( 1.0)

int a = 5;
int b = 2;
double d = a * 1.0 / b;

Observe que a multiplicação e a divisão têm precedência igual e são executadas da esquerda para a direita. Isso significa que importa onde multiplicamos o 1,0.

Exemplos:

Declaração ordem de execução Resultado
int a = 5;
int b = 2;
double d = 1.0 * a / b;
(1.0 * a) / b; 2.5
int a = 5;
int b = 2;
double d = a * 1.0 / b;
(a * 1.0) / b; 2.5
int a = 5;
int b = 2;
double d = a / b * 1.0;
(a / b) * 1.0; 2.0