字符串转成实数-atof

电玩女神 2022-07-24 12:22 243阅读 0赞
  1. /*
  2. 字符串转成实数
  3. 思路:先判断数据的正负,然后分二部分一部分正数,一部小数
  4. */
  5. #define _CRT_SECURE_NO_WARNINGS
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. double myatof(char *str)
  9. {
  10. /* 下的数据类型使用 double 精度更高,而使用 float 会有所差异,请自行验证 */
  11. char *pstr = str;
  12. double data = 0; /* 整数部分 */<span style="white-space:pre"> </span>
  13. double xs = 1.0; /* 小数部分 */
  14. double result = 1.0;
  15. int flag = 1;
  16. /* 判断,如果不符合转换的条件就返回 不太严密, 比如有 2 个小数点 。*/
  17. while (*str != '\0')
  18. {
  19. if ((*str > '9' || *str < '0') && *str != '.' && *str != '-' && *str != '+')
  20. return result;
  21. str++;
  22. }
  23. /* 先判断符号位,如果有符号位,则指指向前移动指向数据 */
  24. if (*pstr == '-')
  25. {
  26. flag = -1;
  27. pstr++;
  28. }
  29. if (*pstr == '+')
  30. {
  31. pstr++;
  32. }
  33. /* 计算出整数部分 */
  34. while (*pstr != '.')
  35. {
  36. data *= 10;
  37. data += (*pstr - '0');
  38. pstr++;
  39. }
  40. pstr++;
  41. /* 计算小数部分 */
  42. while (*pstr != '\0')
  43. {
  44. xs /= 10; /* 0.1 0.01 0.001 .... */
  45. data += xs*(*pstr - '0'); /* 累加小数 */
  46. pstr++;
  47. }
  48. result = data*flag;
  49. return result;
  50. }
  51. void main()
  52. {
  53. char str[20] = "-1234.3456";
  54. float num1;
  55. double num2;
  56. //num1 = atof(str);
  57. //num2 = atof(str);
  58. num1 = myatof(str);
  59. num2 = myatof(str);
  60. printf("num1:%3f\nnum2:%3f\n", num1,num2);
  61. system("pause");
  62. }

发表评论

表情:
评论列表 (有 0 条评论,243人围观)

还没有评论,来说两句吧...

相关阅读