如何在c中简单地将浮点数转换为字符串?

de90aj5v  于 2023-01-29  发布在  其他
关注(0)|答案(4)|浏览(170)
FILE * fPointer;
float amount = 3.1415;
fPointer =fopen("vending.txt","w");
fprintf(fPointer, amount);
printf("The file has been created for the first time and we added the value %f", amount);
fclose(fPointer);

我尝试将浮点数保存到文本文件中,但当我尝试运行此代码时,它触发了编译错误,因为函数fprintf期望第二个参数是字符数组,因此如何将浮点数转换为字符串以便传递它,我有一个C#的背景,在那里像.toString()这样的东西是可能的,所以在C中有没有像这样的东西来直接将浮点型转换为字符串?

lp0sw83n

lp0sw83n1#

如果你可以使用C99标准,那么最好的方法就是使用snprintf函数,在第一次调用时,你可以传递一个零长度(null)的缓冲区给它,它会返回将浮点值转换成字符串所需的长度,然后根据它返回的内容分配所需的内存,这样就可以安全地进行转换。
这解决了在here中讨论的sprintf的问题。
示例:

int len = snprintf(NULL, 0, "%f", amount);
char *result = malloc(len + 1);
snprintf(result, len + 1, "%f", amount);
// do stuff with result
free(result);
eoigrqb6

eoigrqb62#

第二个参数是格式字符串,后面跟有格式参数:

fprintf(fPointer, "%f", amount);

%f告诉fprintf将此参数(amount)作为浮点值的字符串表示形式写入。
可能的格式说明符的列表可以(例如)在here中找到。

s2j5cfk0

s2j5cfk03#

通过使用***sprintf()***,我们可以在c语言中将浮点数转换为字符串,以便更好地理解,请参见以下代码

#include <stdio.h>
int main()
{
   float f = 1.123456789;
   char c[50]; //size of the number
   sprintf(c, "%g", f);
   printf(c);
   printf("\n");
}

希望这对你有帮助。

fslejnso

fslejnso4#

// OP's code           v---- Format string expected here. 
// fprintf(fPointer, amount);

要为每个float打印不同的文本,请使用格式字符串"%.*e"
FLT_DECIMAL_DIG - 1是唯一地打印每个float值而不过度精确所需的位数。

#include <float.h>
#include <stdio.h>

fprintf(fPointer, "%.*e", FLT_DECIMAL_DIG - 1, amount);

使用"%f"将打印几乎一半的小float(如0.000000001f)和-1.2345e-10(如0.000000-0.000000)。
使用"%f"将打印类似FLT_MAX的大float,并带有类似“340282346638528859811704183484516925440.000000”的冗长文本。

相关问题