将字符串转换为double后获取不正确的返回值?

时间:2015-07-17 06:21:56

标签: c floating-point embedded double

我试图将字符串转换为double。转换后,我得到的值不正确。例如,如果我发送" 12.345678",转换为double后,变量保持值为1.2345678。在Cygwin中,这段代码运行正常。我试图在嵌入式CS +(瑞萨微型)编译器中运行此代码。在那里,我没有得到正确的价值观。为什么呢?

这是我的代码:

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 

1 个答案:

答案 0 :(得分:2)

talking = true后缀为指数或scientific notation,表示“x10 1 ”。 1.2345678 x 10 1 与12.345678具有相同的值。问题不在于E+001中的值,而在于您呈现或阅读结果的方式。

如果这是调试器中显示的值,那么这就是调试器提供此类值的方式,并且您没有遇到任何问题。如果这是一个代码输出为字符串的值,则它是输出的方式,而不是发布的代码。