0

私は C++ を学んでいて、単純なプログラムでこれらの問題に遭遇しているので、助けてください。

これがコードです

#include<iostream>
using std::cout;
int main()
{   float pie;
    pie = (22/7);
    cout<<"The Value of Pi(22/7) is "<< pie<<"\n";
    return 0;
}

そして出力は

The Value of Pi(22/7) is 3

Pi の値が 10 進数でないのはなぜですか?

4

3 に答える 3

3

これは、整数除算を行っているためです。

あなたが本当に欲しいのは、浮動小数点数の除算です:

#include<iostream>
using std::cout;
int main()
{   
    float pie;
    pie = float(22)/7;//        22/(float(7)) is also equivalent

    cout<<"The Value of Pi(22/7) is "<< pie<<"\n";
    return 0;
}

ただし、この型変換: float(variable)orfloat(value)は型安全ではありません。

次のように、計算している値が最初から浮動小数点であることを確認することで、必要な値を取得できた可能性があります。

22.0/7

また

22/7.0

また

22.0/7.0

しかし、これは一般的に面倒で、作業しているすべての型を追跡する必要があります。したがって、最終的かつ最良の方法は、 static_cast を使用することです

static_cast<float>(22)/7 

また

22/static_cast<float>(7) 

static_cast使用する理由については、次を参照してください。

(int)x の代わりに static_cast<int>(x) を使用する理由

于 2013-03-10T06:56:55.930 に答える
0
pie = (22/7);

ここでは、両方のオペランドが であるため、除算は整数除算ですint

あなたがしようとしているのは、浮動小数点除算です。

pie = (22.0/7);

ここで22.0doubleであるため、除算は浮動小数点除算になります7(まだですがint)。

規則は、両方のオペランドが整数型 ( int、など)longchar場合は整数除算、ELSE は浮動小数点除算です (つまり、単一のオペランドがfloatまたはであってもdouble)。

于 2013-03-10T06:57:25.490 に答える
0

使用する:

      pi = 22/7.0

2 つのオペランドを / 演算子に整数として指定すると、実行される除算は整数除算になり、浮動小数点数は結果になりません。

于 2013-03-10T07:15:16.500 に答える