double myStod(const char *st)
{
size_t len = strlen(st);
size_t i = 0;
if (st[0] == '-') i++;
double s = 0.0;
while (i < len && isdigit(st[i]))
{
s = s * 10 + (double)(st[i] - '0');
i++;
}
if (st[i] == '.') i++;
else return s;
double order = 1.0;
while (i < len && isdigit(st[i]))
{
order = order / 10;
s = s + (double)(st[i] - '0') * order;
i++;
}
if (st[i] == '-') s = -1 * s;
return s;
}
原因:atof的精度很低,本来以为这个函数就是这样,后来自己写了这个函数,发现都差不多,精度也是很低的,最多只能有6位有效数字。不知道网上为什么说double有1多位精度?