1

私はこのようなことをしました

long double n;

cin >> n;

n = n * 10000;

long long int temp = (long long) n;

今、私がtempを印刷しようとすると、2.36のようないくつかのテストケースで問題が発生します

2.36の場合、tempの値は23600である必要がありますが、tempの値は23599になります。

誰かがこれで私を助けてくれますこれはすでに4つの間違った答えを得ています..小さな問題

簡略化のために..私のコードは次のようになります

int main()

{

int t;

for(scanf("%d", &t); t-- ;) {

    float n;
    scanf("%f", &n);
    n *= 10000;
    long int as = (long int) n;
   cout << "\nas : " << as << " n : " << n << endl;
    long  a, b;
    a = as;
    b = 10000;
    while(a%b != 0) {
        long  temp = a % b;
        a = b;
        b = temp;
    }
    long  factor = b;
    cout << (10000/factor) << endl;
}
return 0;

}

このプログラムの目的は、..小数点以下4桁までの数値が与えられたことです。それは打者が得点した平均スコアだったので、そのスコアを得るために彼がプレーすべき試合の最小数を見つけなければなりませんでした

4

1 に答える 1

4

これは、フローティングポイントが内部で表される方法によるものです。切り捨てを実行する前に、それらを四捨五入する必要があります。

afloor(n+0.5)またはaceil(x-0.5)を実行すると、数値が正しく丸められます。

編集:

切り捨てステップはそれ自体がfloor(..)操作であるためn = n * 10000 + 0.5、@MooingDuckが述べたように実行する必要があります。

于 2013-01-15T22:20:14.047 に答える