Odpowiedzi:
Możesz spróbować:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
Nasza opcja formatu składa się z dwóch części:
3
: oznacza, że dane wyjściowe zostaną uzupełnione do 3 znaków..0f
: oznacza, że wynik nie będzie miał precyzji, co oznacza zaokrąglenie w górę.Od man awk
możesz zobaczyć więcej szczegółów:
width The field should be padded to this width. The field is normally padded
with spaces. If the 0 flag has been used, it is padded with zeroes.
.prec A number that specifies the precision to use when printing. For the %e,
%E, %f and %F, formats, this specifies the number of digits you want
printed to the right of the decimal point. For the %g, and %G formats,
it specifies the maximum number of significant digits. For the %d, %o,
%i, %u, %x, and %X formats, it specifies the minimum number of digits to
print. For %s, it specifies the maximum number of characters from the
string that should be printed.
Używając specyfikatora %f
formatu, twój (zmiennoprzecinkowy) numer zostanie automatycznie zaokrąglony w miarę określania. Na przykład, aby zaokrąglić wartość do liczb całkowitych, użyj
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Jeśli chcesz uzyskać końcowe cyfry, po prostu zmień dokładność.
BEGIN
bloku, nie ma. Najpierw testowałem z ekspresją w normalnym ciele, a więc mea culpa. Dzięki, @Gnouc.
Awk używa sprintf pod spodem i dokonuje bezstronnego zaokrąglania, więc w zależności od platformy, jeśli chcesz ZAWSZE zaokrąglać w górę, może być konieczne użycie czegoś takiego:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Nie zdawanie sobie z tego sprawy może prowadzić do subtelnych, ale paskudnych błędów.
/dev/null
konieczne?