9

这是我的代码:

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

输出是:0.00000000000

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

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

4

3 回答 3

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;
于 2013-10-27T16:11:14.567 回答
2

结果int/int返回给你一个integer.

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

你需要投:

double width = (double)50/110000;

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

double width = 50d / 110000d;
于 2013-10-27T16:13:58.047 回答
2

解释发生了什么:

在 Java 中,数字的默认类型是int,因此当您编写 时50/110000,它们都被考虑在内int,尽管您将结果定义为double
int发生除法时,结果将是0,因为它们都是ints,那么double将保持这个值,它将表示为double,所以你得到0.000000

可能的解决方案:

  • d用:编码这些数字50d/110000d
  • 显式转换一侧(另一侧将被隐式转换)(double)50/110000:.
  • 50.0/110000.

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

于 2013-10-27T16:21:50.950 回答