繁体   English   中英

Java显式类型转换给出不同的结果

[英]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);

  • jx是浮点数,所有连续结果也是浮点数

代码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”。 除数变为“ double”类型

请注意, 3.是双精度型, 3.f是浮点型。 这导致在操作内使用不同的精度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM