Следующее (почти) делает то, что вы хотите.Обратите внимание, что я изменил количество символов в массиве str
с 7 до 8;поскольку все ваши выходные строки содержат 7 символов, прерывание NULL, выполняемое sprintf
, приведет к переполнению буфера в противном случае.
Единственное различие между моими результатами и вашим - округление, выполняемое sprintf
.AFAIK, единственный способ обойти это - предварительно обрезать число, которое вы хотите напечатать, используя 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;
}
Вывод:
val = +2.3346.
val = -23.346.
val = -0.0233.
val = +233.00.