Да.Используйте спецификатор формата %g
вместо %f
, т.е. printf("%g", -0.5);
Если вы недовольны тем, как %g
печатает некоторые числа в экспоненциальной записи, альтернативой является использование snprintf
длязаписать во временный строковый буфер, а затем подсчитать количество нулей в конце перед записью его без printf("%.*s", num_nonzero_places, tmp);
, или вы можете просто удалить нули и использовать fputs
.
Теперь я понимаювопрос в том, чтобы убрать начальный ноль, а не конечные нули.В этом случае лучший способ, который я знаю, - это использовать snprintf
для записи во временную строку, а затем пропустить первый символ при его записи, если этот символ равен «0».Вам также нужно заменить знак «-», если значение отрицательное.Один из способов сделать это:
snprintf(tmp, sizeof tmp, "%+f", val);
printf("%.*s%s", tmp[0]=='-', tmp, tmp+1+(tmp[1]=='0'));