为什么双倍宽度= 50/110000; 输出是0.000000000000000?

这是我的代码:

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

输出是: 0.00000000000

怎么了 ? 预期产出必须是4.5454545454545455E-4

任何机构都可以向我解释为什么?

因为你要分两个整数,所以只取整数部分(整数除法)。

在计算机程序中划分整数需要特别小心。 一些编程语言,把整数除(即给出整数商数作为答案)。 所以答案是一个整数。

例子 :

 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 

您可以将其中一个数字(或两者,但实际上是无用的) double以避免:

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

int/int结果返回一个integer

所以小数部分被截断导致你有一个整数

你需要施放:

 double width = (double)50/110000; 

正如@Josh M所指出的,你也可以尝试:

 double width = 50d / 110000d; 

解释发生了什么事情:

在Java中,默认的数字types是int ,所以当你写50/110000 ,它们都被认为是int ,尽pipe你定义的结果是double
int除法发生时,结果将是0 ,因为它们都是int s,那么double将保存这个值,这将被表示为double ,所以你得到了0.000000

可能的解决scheme:

  • d50d/110000d编码这些数字。
  • 明确投射一面(另一面将隐式投射):( (double)50/110000
  • 50.0/110000

请参阅第5章。转换和促销 ,它会真的帮助你。