c - 将字符串转换为 double 后返回值不正确?

标签 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 编译器检查了这段代码。我得到了正确的输出。

变量this持有值

result 1.234567800000000E+001 

最佳答案

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

如果这是调试器中显示的值,那么这就是调试器显示此类值的方式,并且您不会遇到问题。如果这是您的代码以字符串形式输出的值,那么有问题的是输出方式,而不是发布的代码。

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

相关文章:

c - 为现有的 32 位代码添加 64 位支持,难吗?

compiler-construction - Microchip PIC C18 编程文件格式 .COFF 与 .HEX

c - 这段代码有一个错误

c - 是否有扩展为不带括号返回的宏?

c - ‘main’ 通常是一个非静态函数 ERROR

c++ - 从 unsigned long long 转换为 double ,反之亦然会改变值

python - 如何将 4 字节 IEEE(小端)float 二进制表示转换为 float

c - 将 ptr 赋给 char 指针

java - 对 REST Assured 浮点比较的混淆

c - 堆栈内存消耗是如何计算的?