2

この小さなプログラムは、2桁の数字の1桁目と2桁目を把握するために作られています。ただし、99番で使用しようとすると、9と8が出力されますが、他の2桁の数字は正常に機能しているようです。これはおそらく些細なことですが、私はプログラミングに比較的慣れていません。

#include <iostream>

using namespace std;

void test(int num) {

    float numValue = (num*1.0) / 10;
    cout << numValue << endl;
          // prints 9.9

    int firstDigit = num / 10;
    cout << firstDigit << endl;
         // prints 9

    int secondDigit = (numValue - firstDigit) * 10;
    cout << secondDigit << endl;
         // prints 8, supposed to be (9.9 - 9) * 10

}

int main()
{
    test(99);
    return 0;
}
4

1 に答える 1

1

これは(numValue - firstDigit)、が正確に0.9ではなく0.89999...、浮動小数点数が一般的に正確ではないために発生します。したがって、10を掛ける0.8999...と、次の結果が得られます。8.999...ただし、それをint変数に入れると、トリミングされて正確に8になります。

ただし、正確なタスクに浮動小数点演算は必要ありませんが、整数を使用するだけで十分です。

于 2013-03-26T06:11:14.763 に答える