有人可以解釋我爲什麼在C++中發生這樣的事情:如果我有爲什麼trunc(1)輸出爲0?
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 remanider是0而不是1
,你能否告訴我們的操作?因爲正如阿門的答案指出的那樣,有時雙重行動並不準確。 – quasiverse 2012-08-08 09:21:58
嘗試在輸出值之前將精度設置爲17。 '<<'四捨五入(默認爲6位精度)。截斷和舍入給出不同的結果並不令人驚訝。 – 2012-08-08 09:28:14
或者你可以嘗試輸出tmp - 1.它看起來像我tmp不一定是1。 – 2012-08-08 09:50:07