Câu trả lời:
Bạn có thể thử điều này:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
Tùy chọn định dạng của chúng tôi có hai phần:
3
: có nghĩa là đầu ra sẽ được đệm thành 3 ký tự..0f
: có nghĩa là đầu ra sẽ không có độ chính xác, nghĩa là làm tròn lên.Từ man awk
, bạn có thể xem thêm chi tiết:
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.
Sử dụng công %f
cụ xác định định dạng, số (dấu phẩy động) của bạn sẽ tự động được làm tròn như bạn chỉ định. Ví dụ: để làm tròn một giá trị cho toàn bộ số sử dụng
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Nếu bạn muốn chữ số tiếp theo, chỉ cần thay đổi độ chính xác.
BEGIN
khối, thì không. Tôi đã thử nghiệm với các biểu hiện trong cơ thể bình thường đầu tiên, do đó mea culpa. Cảm ơn, @Gnouc.
Awk sử dụng sprintf bên dưới và nó không làm tròn thiên vị, do đó tùy thuộc vào nền tảng của bạn nếu bạn muốn nó LUÔN làm tròn bạn có thể cần phải sử dụng một cái gì đó như thế này:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Không nhận ra điều này có thể dẫn đến các lỗi tinh vi nhưng khó chịu.
/dev/null
cần thiết không