C 如何转换字符数组中的浮点值
如何将C 如何转换字符数组中的浮点值,c,C,如何将float值复制到c中的字符数组中?例如,float变量x=1.234被复制到char数组中,变成{'1'、'.'、'2'、'3'、'4'}最好使用snprintf而不是sprintf,它解决了许多缓冲区溢出的风险,当开发人员低估了所需的大小时,或者输入未完全验证 int status = snprintf(arr, sizeof(arr), "%.3f", val) ; ... Check overflow if needed ... if ( status >=
float
值复制到c中的字符数组中?例如,float
变量x=1.234
被复制到char
数组中,变成{'1'、'.'、'2'、'3'、'4'}
最好使用snprintf
而不是sprintf
,它解决了许多缓冲区溢出的风险,当开发人员低估了所需的大小时,或者输入未完全验证
int status = snprintf(arr, sizeof(arr), "%.3f", val) ;
... Check overflow if needed ...
if ( status >= sizeof(arr) ) {
.. Overflow
}
printf与原始stdio(gets,vsprintf)中的其他几个函数一样,依赖程序员创建足够大的缓冲区。您可以使用
sprintf()
函数将您的float
数字转换为string
,例如:
char fnum_str[num]; // num is an integer number which large enough
int slen = sprintf(fnum_str,"%f",fnum); // fnum is your float number
现在,您的号码被转换为一个单独的字符
fnum\u str
数组。如果要将double
的所有信息保存到字符串中,可以使用fnum\u str[i]
访问该值,
使用足够宽的字符串和s*printf()
以及%a
、%e
或%g
格式说明符。它们使用文本浮点表示。不要使用“%f”
(文本固定点),这对于较小的值来说是没有信息的,对于较大的值来说是过于冗长的
#include <float.h>
// - hex digits . p - expo \0
#define DBL_HEX_SIZE (1 + (DBL_MANT_DIG + 3)/4 + 1 + 1 + 1 + 8 + 1)
char s[DBL_HEX_SIZE * 2]; // No need to be stingy on buffer sizes.
snprintf(s, sizeof s, "%a", some_double);
#包括
//-十六进制数字。p-expo\0
#定义DBL_十六进制大小(1+(DBL_MANT_DIG+3)/4+1+1+1+8+1)
字符s[DBL_十六进制大小*2];//不需要吝啬于缓冲区大小。
snprintf(s,s的大小,“%a”,一些双);
还是十进制
#include <float.h>
// - digit . dec digits e - expo \0
#define DBL_DEC_SIZE (1 + 1 + 1 + (DBL_DECIMAL_DIG-1) + 1 + 1 + 8 + 1)
char s[DBL_DEC_SIZE * 2]; // No need to be stingy on buffer sizes.
snprintf(s, sizeof s, "%.*e", DBL_DECIMAL_DIG-1, some_double);
#包括
//-数字。数字e-expo\0
#定义DBL_DEC_大小(1+1+1+(DBL_DECIMAL_DIG-1)+1+1+8+1)
字符s[DBL_DEC_SIZE*2];//不需要吝啬于缓冲区大小。
snprintf(s,sizeof s,“%.*e”,DBL\u DECIMAL\u DIG-1,一些双精度);
在新的字符数组中转换或复制它的详细信息使用
sprintf(arr,“%f”,x)
,具有足够大的arr
。非常简单:%f”
导致“0.000000”
或“-0.000000”
大约占所有可能的双倍的一半。不要用它来保存有关double
的信息。