我是编程新手。我需要一个简单的函数将小数点X.YZ的任何数字转换为XYZ。我通过将其乘以10倍并使用double到int转换来做到这一点。
int main()
{
std::cout << "Number: " << std::endl;
double a;
// the uninitialized b was pointed out, its not the issue
long b = 0;
std::cin >> a;
while(b!=a)
{
a*=10;
b=a;
}
std::cout << a << std::endl;
return 0;
}
大约90%的时间都可以正常工作。对于某些数字,例如132.54,该程序将无限长地运行。它以应有的方式处理132.547(应使用更多的内存,然后是132.54)。
所以我的问题是:为什么long int内存范围内的数字不能100%工作?为什么选择132.54和类似的数字?
我正在使用代码块和GNU GCC编译器。
最佳答案
许多十进制浮点数不能精确地用二进制表示。您只会得到一个近似值。
如果将132.54表示为132.539999999999999,则将永远不会获得匹配。
打印循环中的值,您将看到发生的情况。