Назад | Перейти на главную страницу

Bash - Math: возвращает целое число вместо числа с плавающей запятой

Bash возвращает значение 4 вместо 4,2 при делении 21/5. И возвращает 36 при выполнении 9 * (21/5) вместо 37,8.

echo "$(( 21/5 ))"
4

echo "21/5" | bc
4

Аналогично (9 * (21/5)) возвращает 36, но должно быть 37,8;

y=9;
num_lines=21;
w=5;


let value="$y * ($num_lines/$w)"

echo $value
36


but it should be 37.8.

попробуйте что-то вроде этого

$ echo "21/5" | bc -l
4.20000000000000000000

$ echo "$y * ($num_lines/$w)" |bc -l
37.80000000000000000000

Для установки предела десятичной точки используйте, как показано ниже, Для 2 десятичных знаков

 $echo "scale=2; $y * ($num_lines/$w)" | bc -l
 37.80

Для 3-х знаков после запятой просто измените номер шкалы.

$ echo "scale=3; $y * ($num_lines/$w)" | bc -l
37.800