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
Округление производится по двоичному представлению числа по правилу округления до ближайшего четного. Пожалуйста, поймите, что двоичное представление в большинстве случаев не точно равно заданному числу.