2

я хочу округлить значение 262,5 до 263, используя awk

я попробовал ниже

echo "262.5" | awk '{printf "%.f\n", $1}'

Мой ожидаемый ответ 263

2 ответа2

4

Согласно руководству GNU awk,

То, как printf и sprintf() (см. Printf) выполняют округление, часто зависит от системной подпрограммы C sprintf(). На многих машинах округление sprintf() является «беспристрастным», что означает, что оно не всегда округляет конечный «.5», вопреки наивным ожиданиям. При непредвзятом округлении '.5' округляется до четного, а не всегда вверх, поэтому 1,5 округления до 2, но 4,5 округления до 4.

На этой же странице есть пример функции round() :

function round(x, ival, aval, fraction)
{
   ival = int(x)    # integer part, int() truncates

   # see if fractional part
   if (ival == x)   # no fraction
      return ival   # ensure no decimals

   if (x < 0) {
      aval = -x     # absolute value
      ival = int(aval)
      fraction = aval - ival
      if (fraction >= .5)
         return int(x) - 1   # -2.5 --> -3
      else
         return int(x)       # -2.3 --> -2
   } else {
      fraction = x - ival
      if (fraction >= .5)
         return ival + 1
      else
         return ival
   }
}
-1
echo "262.5" | awk '{printf "%.f\n", int($1+0.5)}'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .