Por que largura dupla = 50/110000; a saída é 0,000000000000000?

Este é o meu código:

double width = 50/110000; System.out.println("width ori is "+width ); 

E a saída é: 0.00000000000

O que está errado ? a saída esperada tem que ser 4.5454545454545455E-4

Qualquer corpo pode me explicar por quê?

Porque você está dividindo dois inteiros, então só vai levar a parte inteira (divisão inteira).

Dividir inteiros em um programa de computador requer cuidados especiais. Algumas linguagens de programação tratam a divisão inteira (isto é, dando o quociente inteiro como a resposta). Então a resposta é um inteiro.

Exemplos :

 In real life In Java 4/3 = 1.33333 4/3 = 1 25/12 = 2.083333 25/12 = 2 9/2 = 4.5 9/2 = 4 50/110000 = 0.000454545 50/110000 = 0 

Você pode conjurar um dos números (ou ambos, mas é realmente inútil) double para evitar isso:

 double width = (double)50/110000; double width = 50d/110000; double width = 50.0/110000; 

Resultado de int/int retorna um integer .

Então a parte decimal ficou truncada, resultando em um inteiro

Você precisa transmitir:

 double width = (double)50/110000; 

Como @Josh M apontou, Você também pode tentar:

 double width = 50d / 110000d; 

Explicação para o que está acontecendo:

Em Java, o tipo padrão de números é int , portanto, quando você escreve 50/110000 , ambos são considerados int , embora você tenha definido o resultado como double .
Quando int division ocorre, o resultado será 0 , porque ambos são int s, então o double irá manter este valor, que será representado como double , então você está recebendo 0.000000 .

Soluções possíveis:

  • Codificando estes números com d : 50d/110000d .
  • Casting um lado explicitamente (o outro será implicitamente convertido): (double)50/110000 .
  • 50.0/110000 .

Veja o Capítulo 5. Conversões e Promoções , isso realmente ajudará você.