为什么双倍宽度= 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:
- 用
d
:50d/110000d
编码这些数字。 - 明确投射一面(另一面将隐式投射):(
(double)50/110000
。 -
50.0/110000
。
请参阅第5章。转换和促销 ,它会真的帮助你。