Скрипт оболочки, где bc теряет точность

#! /bin/sh
a1=260
a2=9150
echo "$a1 * 100 / $a2" | bc

выход

2

где это должно быть

2.8415

почему теряется точность, хотя я использую bc?

3 ответа

Попробуйте это (легко для повторного использования, вам просто нужно помнить, чтобы добавить математическое выражение с scale=N):

$ echo "scale=10; $a1 * 100 / $a2" | bc
2.8415300546

Как видите, вы можете указать длину шкалы так, как хотите.

Увидеть

man bc | less +/^' *scale \(\s*exp

Вы можете загрузить математическую библиотеку: bc -l

#! /bin/sh
a1=260
a2=9150
echo "$a1 * 100 / $a2" | bc -l

выход

2.84153005464480874316

Вы можете использовать awk для лучшей арифметики:

awk -v a1=260 -v a2=9150 'BEGIN{printf("%.4f\n", (a1 * 100 / a2))}' 

выход: 2.8415

Другие вопросы по тегам