float型を扱う際に問題点があります。


atcoderをやっていたのですが、このcinに1.3と1.2を入力すると、望まない挙動(error出力)が起きます。キャストなどいろいろ試してみたのですが、原因が分かりません。わかる方いましたら、どうかお願いします。

[code]

    #include <iostream>
    using namespace std;
    
    int main(){
        float xy;
        cin>>xy;
        float temp=(xy-(int)xy)*10;
        if((temp>=0)&&(temp<=2)){
            cout<<temp<<"-";
        }
        else if((temp>=3)&&(temp<=6)){
            cout<<temp;
    
        }
        else if ((temp>=7)&&(temp<=9)){
            cout<<temp<<"+";
        }
        else 
        cout<<"error";
        return 0;
    }
    
[/code]




変数`temp`は`float`型ですので、机上での計算結果が2.0だったとしてもコンピュータ内の表現では整数の2と一致しないこともあります。  
ですので範囲指定の際に

[code]

    if((temp>=0)&&(temp<=2)){
        cout<<temp<<"-";
    }
    else if((temp>=3)&&(temp<=6)){
    
[/code]

では2から3の間にある値は全てすり抜けてしまいます。

[code]

    else if((temp>2)&&(temp<=6)){
    
[/code]

としてみてください。

