2013-06-28 3 views
0

Спецификатор точности для значений с плавающей запятой, заданный printf, позволяет программисту указать количество цифр для печати после десятичной запятой. Имеет ли printf аналогичный спецификатор точности, который позволяет программисту указать, сколько цифр перед десятичной точкой для округления значения?От 10 до 10 с помощью printf

Например, если я прохожу 157 к printf, я хочу, чтобы значение 160 для печати на экран, если я скажу это округление до ближайшего десяти.

ответ

4

Насколько я знаю, нет никакого способа получить printf для этого. Вам придется округлить значение вручную, прежде чем передавать его на printf. Например:

printf("%d\n", myRound(157, 10)); 

int myRound(int x, int b) { 
    return ((x + b/2)/b) * b; // TODO: handling for overflow, etc. 
} 
3

printf не изменяет данные, спецификаторы формата указывают только, как они отображаются. Если вы дадите printf157, он напечатает 157 в той или иной форме.

Проверьте функции округления в C math library для функций округления.

1

No. Ближайшим вы, вероятно, может получить с printf является использование научной нотации:

printf("%.1e\n", 157.0); 

Это напечатает 1.6e+02, который, безусловно, не то, что вы хотите.

0

Мне нравится myRound(157, 10) решение, но думал, что я хотел бы добавить:

printf("%d0\n", (n+5)/10); // int n; 
printf("%.0f0\n", x/10);  // double x; (fails for INF, NAN)