Printf Числовое Право Обоснуйте - PullRequest
0 голосов
/ 27 января 2011

Я пытаюсь отформатировать число со значением от 0 до 9,999.Мне бы хотелось, чтобы всегда отображались 2 наиболее значимые цифры, т.е.

5000 -> 50
0000 -> 00

.т. е.

150 -> 015
101 -> 0101

Это можно сделать с помощью некоторых хакеров, но может ли printf C сделать это напрямую?

Ответы [ 3 ]

3 голосов
/ 27 января 2011

Да, вы можете использовать printf для этого

int v = 5000;
if ((v % 100) != 0)
    printf("%04d", v);
else
    printf("%02d", v/100);
1 голос
/ 28 января 2011

Ужасно, но работает, насколько я могу судить:

printf("%d", value / 1000);
printf("%d", (value % 1000) / 100);
if(value % 100) printf("%d", (value % 100) / 10);
if(value % 10)  printf("%d", value % 10);

Я попробую сыграть в гольф еще немного:

printf("%02d", value / 100);
if(value % 10) printf("%02d", value % 100);
else if(value % 100) printf("%d", (value % 100) / 10);

int hi = value / 100, lo = value % 100;
printf(lo ? "%02d%0*d" : "%02d", hi, 1 + !!(lo % 10), lo % 10 ? lo : lo / 10);
0 голосов
/ 28 января 2011

printf("%d", v/(v%100?v%10?100:10:1));

Попробуйте это:

printf("%.*d", 4-!(v%100)-!(v%10), v/(v%100?v%10?100:10:1));

...