我正在尝试将字符串转换为双精度。转换后,我得到的值不正确。例如,如果我发送“ 12.345678”,则在转换为两倍后,变量将保持值1.2345678。在Cygwin中,此代码可以正常工作。我正在尝试在嵌入式CS +(Renesas micro)编译器中运行此代码。那里我没有得到正确的值。为什么?

这是我的代码:

double str_to_double_func(char str[])
{
  double result = 0.0;
  int len = 0;
  int pos = 0, n;
  while(str[len]!='\0'){
    len++;
  }

  for (n = 0; n < len; n++)
  {
    if (str[n] == '.')
    {
      pos = len - n  - 1;
    }
    else
    {
      result = result * 10.0f + (str[n]-'0');
    }
  }

  while ( pos--)
  {
    result = result/10.0f;
  }
  return result;

}


在这里,问题是在我的CS +(瑞萨微)编译器中得到1.234567800000000E + 001而不是12.345678。我使用Cygwin编译器检查了此代码。在那里,我得到正确的输出。

该变量的保持值

result 1.234567800000000E+001

最佳答案

E+001后缀是指数或scientific notation,表示“ x101”。 1.2345678 x 101与12.345678相同。问题不是result中的值,而是显示或读取结果的方式。

如果这是调试器中显示的值,则这仅仅是调试器呈现此类值的方式,您就不会有问题。如果这是您的代码以字符串形式输出的值,则这是输出的方法,而不是有问题的已发布代码。

关于c - 在将字符串转换为double之后获得错误的返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31469498/

10-11 02:23
查看更多