Yanıtlar:
Bunu deneyebilirsiniz:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
Format seçeneğimiz iki bölümden oluşur:
3
: anlamı çıktı 3 karaktere kadar doldurulur..0f
: anlamı çıktı hassas olmaz, yani yuvarlanır.Kimden man awk
daha fazla ayrıntı görebilirsiniz:
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.
%f
Biçim belirleyicisini kullanarak, (kayan nokta) numaranız belirttiğiniz gibi otomatik olarak yuvarlanır. Örneğin, bir değeri tam sayılara yuvarlamak için şunu kullanın:
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Daha fazla izleyen basamak istiyorsanız, hassasiyeti değiştirmeniz yeterlidir.
BEGIN
bloktaysa, değildir. Önce normal vücuttaki ifade ile test ettim, bu yüzden mea culpa. Teşekkürler, @Gnouc.
Awk altında sprintf kullanır ve tarafsız bir yuvarlama yapar, bu nedenle platformunuza bağlı olarak DAİMA yuvarlamanızı istiyorsanız böyle bir şey kullanmanız gerekebilir:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Bunun farkına varmamak ince ama kötü hatalara yol açabilir.
/dev/null
gerekli?