Используем printf для округления 49,765 до 49,77?

Используем printf для округления 49,765 до 49,77?

49.765 — это мой вывод из кольца команд. Я хочу использовать print f, чтобы округлить его на две десятичные цифры до 49.77.

Какой у него код?

решение1

$ x=49.765
$ printf "%.2f" $(echo "$x + 0.005" | bc)

Вам придется использовать внешние команды, поскольку в printf(1), а оболочка POSIX не имеет встроенной арифметики с плавающей точкой.

Чтобы округлить до ближайшей десятичной цифры, вы добавляете 0,5 и усекаете. Чтобы округлить до ближайшей десятой, вы делите «фактор подталкивания» на 10 и т. д.

Именно отсутствие встроенных возможностей часто подталкивает людей использовать что-то вроде Perl вместо shell:

$ perl -e 'printf "%.2f", 49.765 + 0.005'

То же самое, но все обрабатывается одним процессом.

решение2

Для округления можно использовать следующую команду.

число с плавающей точкой = 49.765; printf("%0.2f", число);

Вы должны быть в состоянии получить 2 цифры после запятой.

Но это просто напечатает, а не обновит значение. Если вы хотите изменить значение переменной, то вам следует использовать ниже.

#include <math.h>

float val = 49.765;

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

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

Как уже отмечалось, из-за особенностей представления чисел с плавающей точкой эти округленные значения могут не быть в точности «очевидными» десятичными значениями, но они будут очень и очень близки.

решение3

Сохраните вывод «кольца команд» в переменной и используйте printf.

$ x=49.765

$ printf '%.2f\n' "$x"
49.76

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

Связанный контент