Hus*_*ada 3 c kernighan-and-ritchie
我正在学习K&R书.我目前在第4章.我正在阅读第71页的atof()函数.函数atof(s)将字符串转换为其双精度浮点等效值.
atof()的代码如下:
// atof:将string s转换为double
double atof2(char s[])
{
double val, power;
int i, sign;
for (i = 0; isspace(s[i]); ++i) //skip white space
;
sign = (s[i] == '-') ? -1: 1;
if (s[i] == '-' || s[i] == '-')
++i;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] == '.')
++i;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}
return sign * val / power;
Run Code Online (Sandbox Code Playgroud)
}
我的问题是变量:权力.我们为什么需要它?
我确实理解变量的使用:"val"但我不确定变量:"power".为什么我们按功率划分val?
变量power用于按功率划分数,以得到浮点数的结果.
让你的字符串成为-12.83,然后第一个for循环将检查空间并增加i为无空间,所以,i=0.
sign将-1作为s[i]=s[0]='-'.
在接下来的两个循环中,字符串的值将转换为整数并存储在val(不包括 . - 自己计算)中.
现在两个循环之后val都会1283.但是最后一个循环将迭代2一次并且power将被改变为100.00(10*1.0在第一次迭代和10*10.0第二次迭代中).
现在获取值,因为浮点val除以power 并乘以sign.
那么,它将返回的是-1*1283/100,因此-12.83是你的浮点数.