我正在学习K& R书。我目前在第4章。我正在阅读第71页的atof()函数。函数atof(s)将字符串转换为其等效的双精度浮点数。
atof()的代码如下:
// atof:将字符串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;
}
我的问题是变量:力量。我们为什么需要它?
我确实理解变量的使用:“val”但我不确定变量:“power”。为什么我们按功率划分val?
答案 0 :(得分:5)
变量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
是你的浮点数。