C语言 浮点数转字符串
时间: 2023-09-04 18:16:24 浏览: 63
C语言提供了`sprintf()`函数可以将浮点数转换为字符串。示例代码如下:
```c
#include <stdio.h>
int main() {
double f = 3.1415926;
char str[20];
sprintf(str, "%.2f", f); // 将浮点数 f 转换成字符串,保留两位小数
printf("%s\n", str); // 输出结果为 3.14
return 0;
}
```
这里使用了`sprintf()`函数,第一个参数是存储转换结果的字符串数组,第二个参数是格式化字符串,其中`%.2f`表示保留两位小数的浮点数。将转换结果输出即可。需要注意的是,要保证存储转换结果的字符串数组足够大,否则会导致内存溢出。
相关问题
C语言浮点数转字符串不用sprintf
一种不用sprintf实现浮点数转字符串的方法是:
1. 将浮点数分为整数部分和小数部分;
2. 将整数部分转换为字符串;
3. 如果小数部分为0,则直接返回整数部分的字符串;
4. 如果小数部分不为0,则将小数部分转换为字符串;
5. 将小数部分的字符串拼接到整数部分的字符串后面,用小数点隔开。
下面是示例代码:
```c
#include <stdio.h>
void reverse(char *str, int len) {
int i = 0, j = len - 1;
while (i < j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
i++, j--;
}
}
char *float_to_str(float num, char *str, int precision) {
// 将浮点数分为整数部分和小数部分
int int_part = (int)num;
float decimal_part = num - int_part;
// 将整数部分转换为字符串
int i = 0;
while (int_part > 0) {
str[i++] = int_part % 10 + '0';
int_part /= 10;
}
if (i == 0) str[i++] = '0'; // 处理0的情况
str[i] = '\0';
reverse(str, i);
// 如果小数部分为0,则直接返回整数部分的字符串
if (decimal_part == 0) return str;
// 如果小数部分不为0,则将小数部分转换为字符串,并拼接到整数部分的字符串后面
str[i++] = '.';
int count = 0;
while (count < precision) {
decimal_part *= 10;
str[i++] = (int)decimal_part + '0';
decimal_part -= (int)decimal_part;
count++;
}
str[i] = '\0';
return str;
}
int main() {
float num = 3.1415926;
char str[20];
float_to_str(num, str, 5);
printf("%s\n", str);
return 0;
}
```
C语言 浮点数转字符串 不使用sprintf函数
可以使用以下方法实现C语言中浮点数转字符串的功能,不使用sprintf函数:
1. 先将浮点数按照小数部分和整数部分分开。
2. 对于整数部分,从个位开始,依次对10取余数,并将余数转化为字符,放入字符串中。
3. 对于小数部分,从小数点后一位开始,重复上述操作。
4. 最后将小数点放入字符串中即可。
下面是一个示例代码:
```
#include <stdio.h>
void ftoa(float n, char* res, int afterpoint)
{
int ipart = (int)n;
float fpart = n - (float)ipart;
int i = 0;
if (ipart == 0) {
res[i++] = '0';
}
while (ipart > 0) {
int rem = ipart % 10;
res[i++] = rem + '0';
ipart = ipart / 10;
}
if (n < 0) {
res[i++] = '-';
}
for (int j = i - 1; j >= 0; j--) {
printf("%c", res[j]);
}
if (afterpoint != 0) {
res[i++] = '.';
fpart = fpart * 10;
for (int j = 0; j < afterpoint; j++) {
int fp = (int)fpart;
res[i++] = fp + '0';
fpart = fpart - (float)fp;
fpart = fpart * 10;
}
}
}
int main()
{
float n = 123.456;
char res[50];
ftoa(n, res, 3);
return 0;
}
```
在上面的代码中,ftoa函数实现了将浮点数n转化为字符串res的功能,afterpoint参数指定了小数点后要显示的位数。在函数中,首先将整数部分转化为字符串,然后再将小数部分转化为字符串。最后将小数点放入字符串中即可。