我需要将诸如“3.456”的字符串转换为没有atof()的浮点数或任何其他字符串操作函数。下面是我的代码,适用于c字符串到int转换,但显然不适用于浮点因为句点。处理这段时间需要添加什么?谢谢。
#include <stdio.h>
int size;
char string[] = "345";
int result = 0;
int i = 0;
int findLength(char string[]){
for(size = 0; string[size]!='\0'; size++){
}
return size;
};
void conversion(char string[]){
result = result * 10 + ( string[i] - '0' );
if (i < size - 1) {
i++;
conversion(string);
}
}
int main(int argc, const char * argv[]) {
findLength(string);
conversion(string);
printf("%d\n", result);
return 0;
}
答案 0 :(得分:0)
在此之前,我认为了解浮点数如何工作以及如何表示它们非常重要,至少在C中。请查看此question/reply以获取更多信息。
现在回到你的问题。由于浮点数在内存中的表示方式,您可能无法获得精确的转换。那就是你可能无法转换&#34; 3.456&#34;到一个保持值为3.456的浮点数。您将只能接近您想要的确切值。
首先,您的代码有些问题:
下面,您将找到一个有效的解决方案。转换的方法如下:
#include <stdio.h>
#include <string.h>
float stringToFloat(char *string)
{
float result= 0.0;
int len = strlen(string);
int dotPosition = 0;
for (int i = 0; i < len; i++)
{
if (string[i] == '.')
{
dotPosition = len - i - 1;
}
else
{
result = result * 10.0 + (string[i]-'0');
}
}
while (dotPosition--)
{
result /= 10.0;
}
return result;
}
int main()
{
char string[] = "3.456";
printf("%f\n",stringToFloat(string));
}
我希望这会有所帮助。
P.S:你可以通过使用double而不是float来提高精度。