Bash Math Oddity (Подразделение с плавающей точкой) - PullRequest
0 голосов
/ 04 мая 2018

Так что у меня возникли некоторые проблемы с математикой bash / bc здесь ..

Я пытаюсь распечатать размер файла резервной копии после того, как перенесу ее на свой gdrive через rclone для резервного копирования. Таким образом, я получаю размер файла с помощью инструкции rclone ls с awk print $ 1, которая прекрасно работает.

В моем конкретном примере я получаю значение 1993211 (байт).

Итак, в моем коде печати я пытаюсь разделить это на 1048576, чтобы получить его в мегабайтах. Что должно дать мне 1,9 мб.

Тем не менее, $ expr 1993211 / 1048576 | bc -l

отпечатки 1

Я пробовал другие перечисленные варианты математики здесь (вкл. Через python / node), и я всегда получаю 1 или 1,0. Как это возможно?

Расчет должен быть 1993211 / 1048576 = 1.90087413788

Есть идеи, что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

В команде expr 1993211 / 1048576 | bc -l, expr делит 1993211 на 1048576, используя целочисленное деление (потому что это то, что expr знает, как это сделать), получает «1» в качестве результата и печатает его. bc -l получает это «1» в качестве ввода, и поскольку операция не указана (expr уже это сделала), она просто печатает ее.

Вам нужно передать выражение «1993211/1048576» непосредственно в качестве ввода в bc -l:

$ echo "1993211 / 1048576" | bc -l
1.90087413787841796875
0 голосов
/ 04 мая 2018

Это потому, что это целочисленное деление. Получите деление с плавающей запятой, которое вы можете запустить:

bc -l <<< '1993211 / 1048576'

, который возвращает: 1.90087413787841796875

или вы можете установить количество десятичных знаков, используя шкалу:

bc -l <<< 'scale=5; 1993211 / 1048576'

, который возвращает: 1.90087

...