这是我的代码:
double width = 50/110000;
System.out.println("width ori is "+width );
输出是:0.00000000000
怎么了 ?预期的输出必须是4.5454545454545455E-4
任何机构都可以向我解释为什么?
这是我的代码:
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 中,数字的默认类型是int
,因此当您编写 时50/110000
,它们都被考虑在内int
,尽管您将结果定义为double
。
当int
发生除法时,结果将是0
,因为它们都是int
s,那么double
将保持这个值,它将表示为double
,所以你得到0.000000
。
可能的解决方案:
d
用:编码这些数字50d/110000d
。(double)50/110000
:.50.0/110000
.请参阅第 5 章。转换和促销,它会真正帮助您。