2017-11-05 7 views
0

大丈夫ですが、タイトルが最も理にかなっていないかもしれませんが、私はここでそれをよりよく説明します。私がしようとしているのは、2の値をとり、それを.01と等しくし、.01 = 2、この2 = .01と.01 = 2の作り方?

if (Value = 2) 
    Value = 0; 
else if (Value = 1.99) 
    Value = .01; 
else if (Value = 1.98) 
    Value = .02; 
else if (Value = 1.97) 
    Value = .03; 
else if (Value = 1.96) 
    Value = .04; 
else if (Value = 1.95) 
    Value = .05; 

のようにそれをハードコーディングしてみました(私はずっと0まで...しかし、それは

私もそうのような値の逆数を取得しようとしました正常に機能しなかったことでした。 。

Value = 1/Value; 

値が2の場合は.5に戻し、va lueは1でした。それは1に設定されます。私は試したときにこれがうまくいかないことを知っていました。私はちょうど何をすべきか分からなかった...誰かが正しい方向に私を導くことができればそれは涼しいだろう。私は、このスレッドは私の過去のスレッドより少し良くなっていると思っています)^^)

+1

'='は割り当てです。 '=='は等価比較です。 'if(Value = 2)'は、あなたが考えていると思われることをしません。 –

+3

あなたは200のif-else-ifステートメントを書いていますか?それは簡単な方法でなければならないという確信です。この場合のように、 'Value = 2 - Value;'はどうですか? – aschepler

+1

また、浮動小数点数で '=='をしたくないのではないでしょうか?[こちらをご覧ください](https://stackoverflow.com/questions/588004/is-floating-point-math-broken) – vu1p3n0x

答えて

3

あなたは代入演算子 "="を使用しています。これは変数に値を割り当てます(x = 10など)。 if-check句の中で、両方の変数の等価を比較等価演算子 "=="と比較したいとします。 !のあなたの問題に

if (Value == 2.f) // checks if Value is equal to 2 
    Value = 0.f; // sets Value equal to 0 
else if (Value == 1.99f) 
    Value = .01f; 
else if (Value == 1.98f) 
    Value = .02f; 
else if (Value == 1.97f) 
    Value = .03f; 
else if (Value == 1.96f) 
    Value = .04f; 
else if (Value == 1.95f) 
    Value = .05f; 

代替まだ完全なソリューション:あなたは価値のバージョンではなく、値の反転を取得しようとしているので、

if (Value <= 2.f && Value >= 0.f) // checks if Value is between or is 2 or 0 
    Value = 2.f - Value; // sets !version of Value to Value 

Value = 1/Value;は動作しません。

浮動小数点数のチェックの後にfを実行することを忘れないでください。そうすれば、奇妙な誤った比較問題に遭遇することはありません。

+0

'f'は「奇妙な誤った比較の問題」を避けることはできません。定数の型を 'double'から' float'に変更するだけです。浮動小数点の比較が奇妙で欠陥があるように見える場合、その動作の仕方やデータの出所を理解していない結果です。 –

関連する問題