При использовании спецификатора формата %f
«2» обрабатывается как минимальное количество символов, а не количество цифр перед десятичной точкой. Таким образом, вы должны заменить его на 4, чтобы получить две первые цифры + десятичную точку + одну десятичную цифру.
printf("%d:%02d:%04.1f hours\n", 1, 4, 2.123456);