[英]java explicit type conversion gives different results
我想知道显式类型转换按什么顺序工作以及在什么区域工作。 在下一个示例中,我收到不同的结果。
float S = 0;
for (int i = 1; i <= 10; i++)
for (int j = 3; j <= 20; j++)
S += (i * j - 5.)/(2. * i + j / 3);
结果是621.8933
float S = 0;
for (float i = 1; i <= 10; i++)
for (float j = 3; j <= 20; j++)
S += (i * j - 5)/(2. * i + j / 3);
S = 607.3105
float S = 0;
for (int i = 1; i <= 10; i++)
for (int j = 3; j <= 20; j++)
S += (float)(i * j - 5)/(2 * i + j / 3);
S = 621.8933
float S = 0;
for (int i = 1; i <= 10; i++)
for (int j = 3; j <= 20; j++)
S += (i * j - 5)/(2 * i + j / 3.);
S = 607.3105
显然正确的结果是607.3105。 为什么当我写(浮点数)或乘以2时,它没有提升,但是当我除以3时,它为什么起作用? 提前致谢。
代码1 S += (i * j - 5.)/(2. * i + j / 3);
:
j
是一个int
,因此完整的除数是int
并执行对int的隐式转换 代码2 S += (i * j - 5)/(2. * i + j / 3);
j
, x
是浮点数,所有连续结果也是浮点数 代码3 S += (float)(i * j - 5)/(2 * i + j / 3);
j
是一个int
,因此完整的除数是int
并执行对int的隐式转换 float
-在计算除数之后执行 代码4 S += (i * j - 5)/(2 * i + j / 3.);
请注意, 3.
是双精度型, 3.f
是浮点型。 这导致在操作内使用不同的精度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.