c - 如何在C中将一个 float 拆分为两个整数

标签 c format-specifiers

下面我尝试设置格式说明符,但每次调用该函数时我都想以不同的方式进行设置。重点是打印 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/

相关文章:

c - 格式说明符 %02x

c - 在C中如何将字符串的每一行保存到一个新字符串中?

c - 编程二叉树 preOrder 函数

c - 读取输入直到 "dot"。字符串大小未知

c - 指定 RIDEV_NOLEGACY 时,Win32 原始输入会阻止输入区域设置切换

c++ - 如何在运行时更改格式说明符的值?

c++ - C++ 标准库是否有用于 printf 转换说明符的模板化 getter?

c - 使用不同的格式说明符更快的输出

(int) -1 的 CUDA 内核 printf 给出带有 %d 说明符的错误输出

c++ - 判断当前字体是否支持 unicode 字符的简便方法?