方法1:使用 sprintf 函数(推荐)
sprintf 是C标准库函数,可以将浮点数格式化并存储到字符串中。

(图片来源网络,侵删)
示例代码
#include <stdio.h>
#include <string.h>
int main() {
double num = 123.456;
char str[50]; // 确保缓冲区足够大
// 格式化浮点数到字符串
sprintf(str, "%.2f", num); // 保留2位小数
printf("字符串: %s\n", str); // 输出: 123.46
return 0;
}
说明
%.2f表示保留2位小数(四舍五入)。- 缓冲区
str的大小要足够,避免溢出。 - 更安全的替代方案是
snprintf(C99标准),可以指定最大写入长度:snprintf(str, sizeof(str), "%.2f", num);
方法2:使用 gcvt 函数(非标准,但常见)
gcvt 是一些C库(如Linux的 glibc)提供的函数,可以将浮点数转换为字符串。
示例代码
#include <stdio.h>
#include <stdlib.h> // 包含 gcvt
int main() {
double num = 123.456;
char str[50];
gcvt(num, 6, str); // 最多6位有效数字
printf("字符串: %s\n", str); // 输出: 123.456
return 0;
}
说明
gcvt会自动处理科学计数法(如23456e+02)。- 不是标准C函数,Windows下可能不可用(可用
_gcvt替代)。
方法3:手动转换(不推荐,但可学习)
如果不想用标准库,可以手动实现转换逻辑(如逐位提取数字)。
示例代码
#include <stdio.h>
#include <math.h>
void floatToString(double num, char *str, int precision) {
int integerPart = (int)num;
double fractionalPart = num - integerPart;
int i = 0;
// 处理整数部分
if (integerPart == 0) {
str[i++] = '0';
} else {
while (integerPart > 0) {
str[i++] = (integerPart % 10) + '0';
integerPart /= 10;
}
// 反转整数部分
for (int j = 0; j < i / 2; j++) {
char temp = str[j];
str[j] = str[i - j - 1];
str[i - j - 1] = temp;
}
}
// 处理小数部分
if (precision > 0) {
str[i++] = '.';
for (int j = 0; j < precision; j++) {
fractionalPart *= 10;
int digit = (int)fractionalPart;
str[i++] = digit + '0';
fractionalPart -= digit;
}
}
str[i] = '\0'; // 字符串结束符
}
int main() {
double num = 123.456;
char str[50];
floatToString(num, str, 3); // 保留3位小数
printf("字符串: %s\n", str); // 输出: 123.456
return 0;
}
说明
- 逻辑复杂,需处理整数和小数部分。
- 容易出错(如负数、大数、精度问题),仅作学习参考。
方法4:使用 C++ 的 std::to_string(仅限C++)
如果是C++项目,可以直接使用 std::to_string:
#include <iostream>
#include <string>
int main() {
double num = 123.456;
std::string str = std::to_string(num);
std::cout << "字符串: " << str << std::endl; // 输出: 123.456000
return 0;
}
| 方法 | 优点 | 缺点 |
|---|---|---|
sprintf / snprintf |
标准库,灵活可控 | 需注意缓冲区大小 |
gcvt |
自动处理科学计数法 | 非标准,平台依赖 |
| 手动转换 | 无依赖 | 复杂且易错 |
std::to_string (C++)) |
简单直接 | 仅限C++ |
推荐使用 snprintf,因为它既安全又符合标准。

(图片来源网络,侵删)
