#include <stdio.h> double atof(char c[]); main() { char str1[255] = "255.123E02"; char str2[255] = "255E02"; char str3[255] = ".123E02"; char str4[255] = ".123"; printf("%s\t%f\n", str1, atof(str1)); printf("%s\t%f\n", str2, atof(str2)); printf("%s\t%f\n", str3, atof(str3)); printf("%s\t%f\n", str4, atof(str4)); } int power (int base, int pow) { int res = 1; int i; for (i = 0; i < pow; i++) { res *= base; } return res; } double fe_StringToDouble(char c[]) { int i = 0; int sign = 1; int esign = 1; int value = 0; int evalue = 0; int st = 0; int stcal; if (c[i] == '+') i++; else if (c[i] == '-') { sign = -1; i++; } while (c[i] <= '9' && c[i] >= '0') { value *= 10; value += c[i] - '0'; i++; } if (c[i] == '.') { i++; while (c[i] <= '9' && c[i] >= '0') { value *= 10; value += c[i] - '0'; st--; i++; } } if ((c[i] == 'E') || (c[i] == 'e')) { i++; if (c[i] == '+') i++; else if (c[i] == '-') { esign = -1; i++; } while (c[i] <= '9' && c[i] >= '0') { evalue *= 10; evalue += c[i] - '0'; i++; } st = st + evalue * esign; } if (st < 0) { stcal = power (10, -st); return (sign * value) / (double)stcal; } else { stcal = power (10, st); return (sign * value) * (double)stcal; } } double atof(char c[]) { return fe_StringToDouble(c); }