Ошибка округления шкалы БК

awk -F: '{sub(/^ /,"",$2);print $2}' file

SLP_DCEMA100BAK01.1M__GBLON500BAK04.6M

0 (backup)

stu_disk_dcema100bak01

3 (1 month)

1 (duplication)

stu_cc_gblon500bak04

6 (6 months)
0
09.03.2021, 09:59
5 ответов

Использованиеprintf:

$ LC_ALL=C printf "%.0f\n" $(echo "3573 * (10 / 100)/1" | bc -l)
357
0
18.03.2021, 22:26

Использование awkкажется гораздо более простым,

awk 'BEGIN { print int(3573 * (10/100)/1) }'
357
2
18.03.2021, 22:26

Я на самом деле не уверен, почему это работает, но если вы сначала сохраните уравнение в переменной, вы можете использовать шкалу 0:

echo "x = 3573 * (10 / 100); scale=0; x/1" | bc -l
0
18.03.2021, 22:26

Другие выходы, где мы играем с порядком операций:

echo "scale=0; 3573 * 10 / 100" | bc -l   # 357
echo "scale=0; 3573 / 100 * 10" | bc -l   # 350
3
18.03.2021, 22:26

@Paul _У Педанта правильная идея:scaleприменима ко всем частям расчета. 10 / 100 = 0 при масштабе 0:

$ bc <<< 'scale = 0; 10 / 100'
0

Таким образом, весь расчет оказывается равным 0.

0
18.03.2021, 22:26

Теги

Похожие вопросы