【问题标题】:how to convert a python expression to a java expression?如何将python表达式转换为java表达式?
【发布时间】:2016-11-23 17:24:34
【问题描述】:

我在python中有如下表达式:

if 0.85 < 0.81 / 0.83 < 1.15 :
    //do something

当我把它放在 python 中时没有问题,它返回一个布尔值 (true),但我不明白 '/' 是什么?因为它看起来像你划分两个布尔值。这个表达式在 java 中的求值是什么?

【问题讨论】:

  • 本文档对您的问题有准确答案:docs.python.org/3/reference/…
  • 顺便说一句,您发布的代码肯定不是 Python,所以请修复它。
  • 抱歉,没有仔细阅读文档。 / 是更具约束力的运算符,所以 @ZWiki 是正确的。除法操作周围有有效的括号。
  • @MadPhysicist 正要说,表格是从低到高绑定的。除法优先级更高。
  • 如果我们是迂腐的,python 的窥视孔优化器会将其编译为 if (true) :)

标签: java python boolean transform


【解决方案1】:

在java中,

if (0.85 < 0.81 / 0.83 &&  0.81 / 0.83 < 1.15) {
    //do something
}

// A better solution as mentioned by @Makoto
float f = 0.81/0.83
if (0.85<f &&  f< 1.15) {
    //do something
}

在 Python 中,所有比较操作都具有相同的优先级。它可以任意链接,例如,x &lt; y &lt; z 等价于x &lt; y and y &lt; z。详细说明请参考Python documentation: Expressions。

【讨论】:

  • 说实话,你只想做一次除法,所以我建议把它放在一个单独的变量中。
【解决方案2】:

您可能想使用and(&&) 来获得True:

if (0.85 < 0.81 / 0.83 && 0.81 / 0.83 < 1.15) {
        //do something
    }

【讨论】:

    【解决方案3】:

    转到文档,您的问题的答案在这两个部分(都在同一页面上)逐字逐句地说明:

    第一部分给出了一个表格,表明/ 的优先级高于&lt;,因此您的表达式实际上是0.85 &lt; (0.81 / 0.83) &lt; 1.15 或0.85 &lt; 0.9759036144578315 &lt; 1.15。

    第二部分说明:

    比较可以任意链接,例如,x

    这意味着您的语句完全翻译为

    double x = 0.81 / 0.83;
    if(0.85 < x && x < 1.15) {
        // ...
    }
    

    这里的关键是,通过比较链接,每个表达式只计算一次。在这种情况下,这意味着只计算一次除法。当然,Java 编译器可能已经为您优化了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2019-06-28
      • 2014-11-20
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多