C printf浮点值的字符串格式
我有一个关于使用printf的问题C printf浮点值的字符串格式,c,string,printf,string-formatting,floating-point-conversion,C,String,Printf,String Formatting,Floating Point Conversion,我有一个关于使用printf的问题 char str[8]; float val = 2.334563; sprintf(str, format, val); printf("val = %s.\n", str); val = -23.34563; sprintf(str, format, val); printf("val = %s.\n", str); val = -0.02334563; sprintf(str, format, val); printf("val = %s.\n",
char str[8];
float val = 2.334563;
sprintf(str, format, val);
printf("val = %s.\n", str);
val = -23.34563;
sprintf(str, format, val);
printf("val = %s.\n", str);
val = -0.02334563;
sprintf(str, format, val);
printf("val = %s.\n", str);
val = 233;
sprintf(str, format, val);
printf("val = %s.\n", str);
预期产出如下:
val = +2.3345
val = -23.345
val = -0.0233
val = +233.00
我需要什么格式的字符串?谢谢您的关注。好老的
%f
"%f"
范例
printf("%f\n", floatVal);
使用snprintf()
格式字符串:
"%#+.5f"
% modifier
# force decimal place
+ show + or -
.5 precision of 5
f use precision as places after decimal
代码:
输出:
val = +2.3345
val = -23.345
val = -0.0233
val = +233.00
val = +0.0003
val = +2.3346.
val = -23.346.
val = -0.0233.
val = +233.00.
我唯一能想到的是:
const char *format = "val = %+6.*f\n";
int places_past_decimal = ???;
printf(format, places_past_decimal, 2.334563f);
在这种情况下,您需要传递一个附加参数(超过小数点的位数
),该参数是数字左侧未使用的数字中剩余的位数。以下(几乎)就是您想要的。注意,我将str
数组中的字符数从7改为8;由于所有输出字符串都包含7个字符,sprintf
执行的空终止将导致缓冲区溢出
我的结果和你的结果之间的唯一区别是sprintf
执行的四舍五入。好了,解决这个问题的唯一方法是使用floor
预先截断要打印的号码;例如,不舍入打印2位float f=floor(1.8888*100)/100代码>
#include <stdio.h>
int main(void)
{
char str[8];
{
float val = 2.334563f;
sprintf(str, "%+6.*f", 4, val);
printf("val = %s.\n", str);
}
{
float val = -23.34563f;
sprintf(str, "%+6.*f", 3, val);
printf("val = %s.\n", str);
}
{
float val = -0.02334563f;
sprintf(str, "%+6.*f", 4, val);
printf("val = %s.\n", str);
}
{
float val = 233.0f;
sprintf(str, "%+6.*f", 2, val);
printf("val = %s.\n", str);
}
return 0;
}
我需要固定大小的输出字符串。%f“
也不会在正数前显示+号。我考虑过,但希望找到最佳解决方案。这需要手动计算代码中所需的小数位数。在任何情况下,用代码做这件事的方法是什么?我认为snprintf(str,8,“%#+.5f”,0.0003);最好的all@user1020803这在所有情况下都有效。在我所有的更改中迷失了方向,不知道为什么在切换到snprintf()后我仍然使用sig figs。谢谢编辑以反映。未获得所需的输出。他的问题应该问得更直接。@JoeMcGrath:这个问题显然有家庭作业的味道&我不喜欢为家庭作业问题编写任何形式的代码,除了给出提示或想法。原因:我不想让一个程序员坐在我旁边(尽管是几年后),他不能在给出提示的情况下编写源代码。好的,谢谢。我不熟悉堆栈溢出,没有意识到。只是想回答问题。我是一个业余程序员,没上过学。没有想到家庭作业。JoeMcGrath:是的,请。我理解你的热情和帮助的意愿,但我们并不想把你的热情和帮助交给一个“做我的作业”网站。通常,对于Q,我们希望看到OP尝试了什么样的作业味道,他们解决问题的努力和想法。然后提供微妙的提示/线索,这些提示/线索将为他们指明方向并排除障碍,但也会给他们留下足够多的家庭作业。作为一名业余程序员,你肯定知道,除了努力工作,别无选择。欢迎来到SO,并与你见面。祝你一切顺利:)
val = +2.3346.
val = -23.346.
val = -0.0233.
val = +233.00.