私はPythonで次の式を持っている:私はPythonでこれを置くときPython式をJava式に変換する方法は?
if 0.85 < 0.81/0.83 < 1.15 :
//do something
がされても問題はありません、それはブール値(true)を返しますが、私は何を「/」理解していませんか?それは2つのブール値を分けるように見えるからです。この式の評価はJavaで何をするのですか? Pythonで
私はPythonで次の式を持っている:私はPythonでこれを置くときPython式をJava式に変換する方法は?
if 0.85 < 0.81/0.83 < 1.15 :
//do something
がされても問題はありません、それはブール値(true)を返しますが、私は何を「/」理解していませんか?それは2つのブール値を分けるように見えるからです。この式の評価はJavaで何をするのですか? Pythonで
、
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
}
、すべての比較演算は同じ優先順位を持っています。これは任意に連鎖することができ、たとえばx < y < z
はx < y and y < z
に相当します。詳細な説明は、Python documentation: Expressionsを参照してください。あなたがTrue
取得するand
(& &)を使用する場合があります
真実を伝えてください、あなたはそのディビジョンを一度しかしたくないので、別の変数に入れておくことをお勧めします。 – Makoto
@Makoto、この種のthxに思い出させる。 – SparkAndShine
:ドキュメントに行く
if (0.85 < 0.81/0.83 && 0.81/0.83 < 1.15) {
//do something
}
を、あなたの質問への答えは、文字通り、これらの2つのセクションで綴られている(同じページに両方):
/
は<
より高い優先度を持つため、式は実質的に0.85 < (0.81/0.83) < 1.15
または0.85 < 0.9759036144578315 < 1.15
となります。
第2の部分の状態:
比較は任意に連鎖することができ、例えば、(そのYが一度だけ評価されている以外は< Y < = zは、X < YおよびY < = Zと等価なXしかしいずれの場合も、x < yが偽であると判断されたとき、zは全く評価されない)。
これはあなたの文は、ここでキーが比較の連鎖で、各式が一度だけ評価されていることである
double x = 0.81/0.83;
if(0.85 < x && x < 1.15) {
// ...
}
として正確に翻訳することを意味します。この場合、分割を1回だけ計算することを意味します。もちろん、Javaコンパイラはおそらくあなたのためにそれを最適化しているでしょう。
このドキュメントには、あなたの質問に対する正確な回答があります。https://docs.python.org/3/reference/expressions.html#operator-precedence –
あなたが投稿したコードは、Pythonではなく、それ。 –
申し訳ありませんが、慎重に文書を読んでいませんでした。 '/'はより拘束力のある演算子なので、@ ZWikiは正しいです。効果的に分割操作の周りに括弧があります。 –