Ответ 1
#include <math.h>
...
printf("%.2f", floor(100 * R) / 100);
Давайте рассмотрим, что мы имеем double R = 99.999999;
(что может быть получено результатом какого-либо другого вычисления), теперь желаемый результат 99.99
Я пробовал использовать printf("%.2lf",R);
, но он округлял значение. Как получить желаемый результат? (предпочтительно используя printf
)
#include <math.h>
...
printf("%.2f", floor(100 * R) / 100);
Все, что вам нужно сделать, это вычесть .005 из числа, и волшебный printf будет вести себя как угодно: всегда округлять вниз.
sprintf
в буфер, а затем поместите NUL char через два байта через.
Затем printf
ваша окончательная строка с использованием промежуточной.
Если у вас есть это, используйте fmod()
, чтобы отрубить хвост double
:
double rounded = R - fmod(R, 0.01);
// Now just print rounded with what you were using before
Это имеет то преимущество, что работает то же самое, если R
является положительным или отрицательным.
Можете ли вы умножить на 100, а затем усечь на целое число? Затем вы можете отформатировать результат, как и доллары и цента. Простое разделение на 100 может вернуть вас обратно в квадрат из-за проблем с плавающей точкой.
Как насчет использования double trunc(double)
от GLibC?
Другое решение, используя приведения:
...
printf("%.2lf", (double) ((int) (R * 100)) / 100);
Еще один способ, поистине, означать агностик: printf ( "% d.% d\n", (int) r, abs ((int) (r * 100)% 100));