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

时间:2013-10-27 16:10:39

标签: java

这是我的代码:

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

输出为:0.00000000000

怎么了?预期输出必须为4.5454545454545455E-4

任何机构都可以向我解释原因?

3 个答案:

答案 0 :(得分:37)

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

  

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

示例:

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;

答案 1 :(得分:2)

int/int的结果会向您返回integer

所以小数部分被截断,导致你得到一个整数

你需要施放:

double width = (double)50/110000;

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

double width = 50d / 110000d;

答案 2 :(得分:2)

对正在发生的事情的解释:

在Java中,默认的数字类型为int,因此当您编写50/110000时,它们都被视为int,尽管您将结果定义为double }。
发生int除法时,结果将为0,因为它们都是int s,那么double将保留此值,该值将表示为{{1} }},所以你得到了double

可能的解决方案:

  • 使用0.000000 d编码这些数字。
  • 明确地投射一方(另一方将被隐式投射):50d/110000d
  • (double)50/110000

请参阅Chapter 5. Conversions and Promotions,这对您有帮助。