0

首先为提出这个愚蠢的问题道歉:

如何在 c (GNU C) 中调用此函数

char *ftoa(float f, char *buf, int places)
4

3 回答 3

3

这就是你所说的:

int decimal_places = 10;
char* result = malloc(decimal_places + 1);
ftoa(SOME_FLOAT_VALUE, result, decimal_places);

该函数返回其buf参数。与往常一样,完成后不要忘记 free()result字符串。

于 2012-12-22T08:54:22.340 回答
0

我更喜欢:

#define DECIMALS 10
char result[DECIMALS+1];
ftoa(SOME_FLOAT_VALUE, result, decimal_places);

我也建议使用 sprintf 以获得更大的灵活性。

我更喜欢静态分配的原因是这会占用更少的空间,当你离开函数时它会自动取消分配[如果这不是你想要的,显然,你可能需要 malloc,但在小变量的堆栈分配上,并且11字节很小!,应该是首选方式。我看到太多的代码分配毫无意义——它浪费了内存,并添加了额外的代码。[从堆中分配 11 个字节的开销可能超过 11 个字节,因为它必须四舍五入到 12 个字节,然后是一个“标题”来说明分配,在许多系统中是 16 或 32 个字节,在某些情况下 12 个字节]

于 2012-12-22T12:02:52.233 回答
0

我认为 C 的 GNU 实现没有预定义的函数 ftoa()

您可以使用 sprintf() 如下:

float f;
char *a = (char *)malloc(10*sizeof(char)); //assuming you need 10 characters to store f
sprintf(a, "%f", f);

如果您只想有特定的小数位数,您可以使用“%0.2f”(小数点后两位数)等代替“%f”

sprintf() 可以代替 itoa() 函数派上用场。例如:

char *a = (char *)malloc(10*sizeof(char);
int x = 10;
float f = 12.4;
sprintf(a, "%d", x);  //=itoa() function
sprintf(a, "%f", f);

祝你好运!

于 2012-12-22T13:15:23.973 回答