下面我尝试设置格式说明符,但每次调用该函数时我都想以不同的方式进行设置。重点是打印 float Data_Ave。在一个实例中,我想要说明符 %2.3f,因此我会为 sig_figs_before 传递一个 2,为 sig_figs_after 传递一个 3。在下一个实例中,我想要 %1.4f,所以我将传递这些整数。
char * Send_Data(float Data[10], const char* SUBJECT_SEND_NAME, char *Data_Backup, int sig_figs_before, int sig_figs_after)
{
float Data_Ave = ((Data[0] + Data[1] + Data[2] + Data[3] + Data[4] +
Data[5] + Data[6] + Data[7] + Data[8] + Data[9])/10);
sprintf(msgBody,"%%i.%if, ", before_decimal, after_decimal, Data_Ave);
... //Some more code
}
我很确定这行不通,所以我想将 float 分成两个整数并像这样打印:
sprintf(msgBody,"%i.%i, ", int_value, decimal_value);
但我不知道如何正确拆分 float 。 有什么建议吗?
最佳答案
你想要:
sprintf(msgBody,"%*.*f, ", before_decimal+after_decimal+1, after_decimal, Data_Ave);
请注意,您可以使用 *
通过整数参数指定宽度。另请注意,在格式 %N.Mf
中,N
是打印数字的总大小(包括小数、点、符号、指数、填充等)和 M
是小数精度。这就是为什么在您的情况下,第一个数字应为 before_decimal+after_decimal+1
而不是 before_decimal
。
关于c - 如何在C中将一个 float 拆分为两个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22111683/