Округление числа к 2 десятичным разрядам в C

Можно использовать дополнение Firefox Инструментарий Веб-разработчика

198
задан mskfisher 9 May 2012 в 03:07
поделиться

7 ответов

Если вы просто хотите округлить число для вывода, то строка формата «%. 2f» действительно является правильным ответом. Однако, если вы действительно хотите округлить значение с плавающей запятой для дальнейших вычислений, сработает что-то вроде следующего:

#include <math.h>

float val = 37.777779;

float rounded_down = floorf(val * 100) / 100;   /* Result: 37.77 */
float nearest = roundf(val * 100) / 100;  /* Result: 37.78 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 37.78 */

Обратите внимание, что есть три разных правила округления, которые вы можете выбрать: округление в меньшую сторону (т.е. усечение после двух десятичных знаков) , округляем до ближайшего и округляем в большую сторону. Как правило,

388
ответ дан 23 November 2019 в 05:10
поделиться

Невозможно округлить float до другого float , потому что округленное float не может быть представимым ( ограничение чисел с плавающей запятой). Например, вы округлили 37,777779 до 37,78, но ближайшее представимое число - 37,781.

Однако вы можете «округлить» float с помощью строковой функции форматирования.

11
ответ дан 23 November 2019 в 05:10
поделиться
printf("%.2f", 37.777779);

Если вы хотите записать в C-строку:

char number[24]; // dummy size, you should take care of the size!
sprintf(number, "%.2f", 37.777779);
19
ответ дан 23 November 2019 в 05:10
поделиться

Как насчет этого:

float value = 37.777779;
float rounded = ((int)(value * 100 + .5) / 100.0);
22
ответ дан 23 November 2019 в 05:10
поделиться

Если вы говорите о округлении значения для печати, тогда ответы Эндрю Колесона и Арака верны:

printf("%.2f", 37.777779);

Но обратите внимание, что если вы стремитесь округлить число до 37,78 для внутреннего использования (например, для сравнения с другим значением), тогда это не очень хорошая идея из-за того, как работают числа с плавающей запятой: вы обычно не делаете Я хочу выполнить сравнение на равенство для чисел с плавающей запятой, вместо этого используйте целевое значение +/- значение сигмы. Или закодируйте число как строку с известной точностью и сравните это.

См. Ссылку в Ответ Грега Хьюгилла на связанный вопрос , который также объясняет, почему вы не должны использовать плавающую точку для финансовых расчеты.

42
ответ дан 23 November 2019 в 05:10
поделиться

Использование %. 2f в printf. Он выводит только 2 десятичные точки.

Пример:

printf("%.2f", 37.777779);

Вывод:

37.77
76
ответ дан 23 November 2019 в 05:10
поделиться

Вы все еще можете использовать:

float ceilf(float x); // don't forget #include <math.h> and link with -lm.

пример:

float valueToRound = 37.777779;
float roundedValue = ceilf(valueToRound * 100) / 100;
6
ответ дан 23 November 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: