誰かがC++でそのようなことが起こる理由を私に説明できますか?
double tmp;
... // I do some operations with tmp
// after which it has to be equal to one
cout << tmp; // prints 1
cout << trunc(tmp); // prints 0
cout << trunc(tmp*10); // prints 9
私はこれを小数部の右側の数値から分離するために使用しています。たとえば、次の場合:5.010 ...0.010にしたい..だから私は次を使用しています:
double remainder = tmp - trunc(tmp);
コード全体を投稿しています....フロアの提案が機能しません
short getPrecision(double num, short maxPrecision) {
// Retrieve only part right of decimal point
double tmp = fabs(num - trunc(num));
double remainder = tmp;
// Count number of decimal places
int c = 0;
while (remainder > 0 && c < maxPrecision) {
tmp *= 10;
remainder = tmp - trunc(tmp);
c++;
}
return c;
}
たとえば5.1でこの関数を実行すると、リマニダーは1ではなく0になります。