这是我的代码:
double width = 50/110000;
System.out.println("width ori is "+width );
输出为:0.00000000000
怎么了?预期输出必须为4.5454545454545455E-4
任何机构都可以向我解释原因?
答案 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,这对您有帮助。