【问题标题】:Conditional Statement Returning False条件语句返回 False
【发布时间】:2013-09-29 19:07:25
【问题描述】:

为什么这个语句返回假?当我手动计算时,我得到 114 = 114,这应该是真的:

System.out.println(114 == (114.0 / Math.PI * Math.PI));  

【问题讨论】:

  • System.out.printf("%.15f\n", (114.0 / Math.PI * Math.PI));.
  • 手工计算的时候,中间结果114.0/Math.PI的二进制点后面带了多少位?您使用什么舍入规则来生成这些位?

标签: java logic conditional


【解决方案1】:

这是因为使用Math.PI 会引入浮点运算,它不如实际的整数运算精确。右边的结果实际上是 114.00000000000001,这个值非常非常接近 114,但不完全是。

【讨论】:

    【解决方案2】:

    试试下面的代码:

    double res=114.0 / Math.PI * Math.PI;
    System.out.println(res);
    

    结果是:114.00000000000001 不是 114。

    【讨论】:

    • 非常感谢,现在说得通了。
    【解决方案3】:

    因为

    System.out.println(114.0 / Math.PI * Math.PI);
    

    将打印

    114.00000000000001
    

    你可以试试

    System.out.println(114 == (int)(114.0 / Math.PI * Math.PI));
    

    (将 float 转换为 int)这将返回 true...

    【讨论】: