我正在尝试调试一段遗留代码。该代码对于最多 9 位数字的值运行良好,但对于大于 9 位的数字的值开始抛出奇怪的错误。我知道这与类型转换有关,但我不知道是什么原因。
这是代码:
int a = 0;
char numbuff[15] = "999999999"; //nine digits long works
printf("%s\n",numbuff);
printf("%f\n",atof(numbuff));
a = atof(numbuff) / 1; //I think they are dividing by 1 to cast to int?
printf("%d\n",a);
当我使用九位数字运行此程序时numbuff
,我得到了预期的结果:
999999999
999999999.000000
999999999
但是当我将其设置为 10 位数字来运行它时numbuff
,我得到了以下结果:
9999999999
9999999999.000000
2147483647
所以我想我不太理解为什么原始代码要将浮点数除以 1。我以为是将浮点数转换为整数,但对于数字超过 9 位的数字,这不起作用。
我相信代码使用 atof() 而不是 atoi() 是为了摆脱 numbuff 字符串中的空格,这是有意义的(因为 numbuff 用于许多不同的数字长度)。
因此乍一看这段代码似乎有意义,但它却不起作用。
发生了什么事?我该如何修复此代码以使其适用于更长的数字?