Не так, как вы это описали, нет. Если вам нужны условные десятичные разряды, вы должны сделать это сами.
Прошло много времени с тех пор, как я испортил форматы printf, но в большинстве случаев это работает
char *BuildConditionalFormat(double val)
{
int tenths = (int)(val * 10) % 10;
if (tenths == 0)
return ".0f";
return ".1f";
}
/* test rig */
float f = 5.0;
printf(BuildConditionalFormat(f), f); /* -> 5 */
f = 5.13;
printf("\n");
printf(BuildConditionalFormat(f), f); /* -> 5.1 */
printf("\n");
Это соответствует вашим правилам, но также предоставит интересный урок о том, почему воняет с плавающей запятой, потому что 5.1 -> 5. Почему? Потому что 5.1 не представляется чисто (на моей машине) как float - это 5.09999 и некоторые другие изменения.
Скорее всего, вам нужно узнать о floor () и ceil () тоже ...