【问题标题】:After converting string to double getting incorrect return value?将字符串转换为双精度后得到不正确的返回值?
【发布时间】:2015-10-06 19:14:08
【问题描述】:

我正在尝试将字符串转换为双精度。转换后,我得到的值不正确。例如,如果我发送“12.345678”,在转换为 double 后,变量的值是 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 

【问题讨论】:

  • 请告诉我们the answers to your previous question 没有帮助到您?
  • 在我之前的问题中,变量持有无限值。这是根据您的宝贵建议修改后的代码。但现在我的问题是“结果”变量在我的编译器中持有不同的值。跨度>
  • 1.2345678E1 和 12.345678E0 或 12.345678 不一样吗?所以问题只是值的打印方式,而不是值的转换方式?
  • 在调用函数代码中,这个“结果”变量被分配给另一个双变量并执行加法,值为 21.345678。结果是 22.5802458 而不是 33.691。
  • 如果您的问题是 E+001 是什么意思?” 您可能没有投反对票。事实上,你问的是为什么结果不正确,而实际上它是完全正确的。

标签: c floating-point embedded double


【解决方案1】:

E+001 后缀是指数型或scientific notation,意思是“x101”。 1.2345678 x 101与 12.345678 的值相同。问题不在于result 中的值,而是您呈现或读取结果的方式。

如果这是在调试器中显示的值,那么这只是调试器呈现这些值的方式,您没有问题。如果这是您的代码作为字符串输出的值,那么它是输出方式,而不是发布的代码。

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 2014-01-01
    • 2012-03-14
    • 2013-09-23
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多