将char *转换为float或double

前端之家收集整理的这篇文章主要介绍了将char *转换为float或double前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个从文件读入的值,并存储为char *.值是货币编号,#.##,##.##或###.##.我想将char *转换为我可以在计算中使用的数字,我尝试过atof和strtod,他们只是给我垃圾数字.这样做的正确方法是什么,为什么我做错的方式呢?

这基本上就是我正在做的事情,只是从文件读入char *值.当我打印出temp和ftemp变量时,它们只是垃圾,巨大的负数.

另一个编辑:

我在gcc中运行这个

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char *test = "12.11";
  5. double temp = strtod(test,NULL);
  6. float ftemp = atof(test);
  7. printf("price: %f,%f",temp,ftemp);
  8. return 0;

}

我的输出是价格:3344336.000000,3344336.000000

编辑:这是我的代码

  1. if(file != NULL)
  2. {
  3. char curLine [128];
  4. while(fgets(curLine,sizeof curLine,file) != NULL)
  5. {
  6. tempVal = strtok(curLine,"|");
  7. pairs[i].name= strdup(tempVal);
  8. tempVal = strtok(NULL,"|");
  9. pairs[i].value= strdup(tempVal);
  10. ++i;
  11. }
  12. fclose(file);
  13. }
  14.  
  15. double temp = strtod(pairs[0].value,NULL);
  16. float ftemp = atof(pairs[0].value);
  17. printf("price: %d,ftemp);

我的输入文件是非常简单的名称,值对如下:

  1. NAME|VALUE
  2. NAME|VALUE
  3. NAME|VALUE

价值是美元金额

解决:谢谢大家,我使用%d而不是%f,并且没有包含正确的标题.

解决方法

你缺少一个包括
#include< stdlib.h>,因此GCC创建一个atof和atod的隐式声明,导致垃圾值.

double的格式说明符是%f,而不是%d(即整数).

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. char *test = "12.11";
  7. double temp = strtod(test,NULL);
  8. float ftemp = atof(test);
  9. printf("price: %f,ftemp);
  10. return 0;
  11. }
  12. /* Output */
  13. price: 12.110000,12.110000

猜你在找的CSS相关文章