我是编程新手。我需要一个简单的函数将小数点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,则将永远不会获得匹配。

打印循环中的值,您将看到发生的情况。

09-11 19:20