2016-11-25 4 views
0

ねえ、私は検出できないバグがあります。親切に私を助けてください。このコードでは、私は、パーセンテージを計算したいが、計算後可変のパーセンテージがゼロの値を表示しています

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int total_marks, obtained_marks, percentage; 
    total_marks = 1100; 
    cout << "enters yours obtained marks"<<endl; 
    cin >> obtained_marks; 
    percentage = (obtained_marks/total_marks) * 100; 
    cout << "yours percentage =" << percentage; 
    if (percentage >= 60) 
    { 
     cout << "you have passed with first division"; 
    } 
    cout << "yours pecentage is=" << percentage; 
    system("pause"); 
    return 0; 
} 
+3

なぜあなたは 'int'を使用していますか? – user463035818

+0

すべての変数は10進数のない数値を含んでいるので、%変数を持つfloatも使用しますが、依然としてゼロの値を与えます。 –

+0

ユーザーが100と入力した場合、100/1100に小数点以下の桁がある – user463035818

答えて

2

整数部がゼロに向かって切り捨てられます。

考える

int total_marks, obtained_marks, percentage; 

percentage = (obtained_marks/total_marks) * 100; 

obtained_markstotal_marks未満である場合

(obtained_marks/total_marks)の値はゼロとなります。その場合、

percentage = (obtained_marks/total_marks) * 100; 

もゼロになります。括弧内の値は依然としてゼロであるため

偶数

percentage = (obtained_marks/total_marks) * 100.0; 

は、ゼロとなります。

一つの良い方法は、次のようになります。

percentage = (100 * obtained_marks)/total_marks; 
0

変数「割合」でゼロ値ストアはマークと合計マークが得られるあなたが分裂するときにゼロを取得しているので、整数です。データ型をfloatまたはdoubleに変更します。

+0

あなたはこれを説明してください、私は私の答えを持っていますが、簡単にあなたのラインを説明することができますか? –

+0

@OsamaJuttゼロより小さい数値を計算するために整数の計算を使用していますが、ゼロに切り捨てられます。たとえば、整数計算の25/100は.25ですが、小数点以下の桁は削除され、ゼロが残ります。すべてのデータ型をfloatまたはdoubleに変更すると、その小数点以下の桁数が失われることはなく、期待する答えが得られます。 – nicomp

+0

ありがとうございました。 –

関連する問題