Скрипт оболочки, где 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