【发布时间】:2012-08-05 09:03:51
【问题描述】:
谁能解释一下为什么在 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 运行这个函数时,remanider 是 0 而不是 1
【问题讨论】:
-
你能告诉我们操作吗?因为正如 Armen 的回答所指出的那样,有时双重操作并不准确。
-
在输出值之前尝试将精度设置为 17。
<<舍入(默认为 6 位精度)。截断和舍入给出不同的结果也就不足为奇了。 -
或者您可以尝试输出 tmp - 1。在我看来,tmp 根本不必为 1。
标签: c++ double decimal-point truncation