Как использовать expr на плавании?

Вы попытались использовать CTRL - F5 для обновления страницы?

25
задан lennon310 24 October 2014 в 16:27
поделиться

4 ответа

Как сообщается на странице руководства bash:

Оболочка позволяет вычислять арифметические выражения при определенных обстоятельствах ... Вычисление выполняется в целых числах фиксированной ширины без проверки переполнения, хотя деление на 0 задерживается и отмечается как ошибка.

Вы можете умножить на 100 раньше, чтобы получить лучший частичный результат:

let j=20*100/30
echo $j

66

Или на большее, кратное 10, и представьте десятичный разряд, которому он принадлежит:

let j=20*10000/30
echo $j

66666

6
ответ дан 28 November 2019 в 18:15
поделиться

bc сделает это за вас, но порядок важен.

> echo "scale = 2; 20 * 100 / 30" | bc
66.66
> echo "scale = 2; 20 / 30 * 100" | bc
66.00

или, для вашего конкретного случая:

> export ach_gs=2
> export ach_gs_max=3
> x=$(echo "scale = 2; $ach_gs * 100 / $ach_gs_max" | bc)
> echo $x
66.66

Какой бы метод вы ни выбрали, это созрел для включения в качестве функции, чтобы облегчить вашу жизнь:

#!/bin/bash
function pct () {
    echo "scale = $3; $1 * 100 / $2" | bc
}

x=$(pct 2 3 2) ; echo $x # gives 66.66
x=$(pct 1 6 0) ; echo $x # gives 16
32
ответ дан 28 November 2019 в 18:15
поделиться

просто сделайте это в awk

# awk 'BEGIN{print 20 / 30 * 100}'
66.6667

сохраните в переменной

# result=$(awk 'BEGIN{print 20 / 30 * 100}')
# echo $result
66.6667
10
ответ дан 28 November 2019 в 18:15
поделиться

Обычно я использую perl:

perl -e 'print 10 / 3'
14
ответ дан 28 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

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