单精度和双精度浮点数的存储方式与整数不同,因此整数(例如 5、10)实际上可能看起来像长小数(例如 4.9999001、10.000000001)。当您转换为 时int
,它所做的只是截断整个数字。因此,如果该数字当前表示为4.999999999
,则将其转换为 anint
会给您4
。 std::round
大多数时候会为您提供更好的结果(如果数字是 4.6 并且您只想要整数部分,则回合将无法正常工作)。那么更大的问题是:您希望通过将 a 转换为 adouble
来完成int
什么?
通常,在处理浮点数时,您将需要使用一些epsilon值,即您的最小有效数字。因此,如果您想将 4.9999999 与 5 进行比较,您可以执行 (pseudo-code): if abs(5 - 4.9999999) < epsilon, return 5
。
例子
int main()
{
double d;
std::cin >> d;
while (std::fabs(d - 0.0) > DBL_EPSILON)
{
std::cout << d << std::endl;
double m = 100 * d;
int n = static_cast<int>(m);
if (std::fabs(static_cast<double>(n) - m) > DBL_EPSILON)
{
n++;
}
std::cout << n << std::endl;
std::cin >> d;
}
return 0;
}