я хочу округлить значение 262,5 до 263, используя awk
я попробовал ниже
echo "262.5" | awk '{printf "%.f\n", $1}'
Мой ожидаемый ответ 263
я хочу округлить значение 262,5 до 263, используя awk
я попробовал ниже
echo "262.5" | awk '{printf "%.f\n", $1}'
Мой ожидаемый ответ 263
Согласно руководству 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
}
}
echo "262.5" | awk '{printf "%.f\n", int($1+0.5)}'