Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Арифметика с плавающей точкой

#linux #bash


Возникла необходимость перевести секунды в милисекунды.
Скрипт:

#!/bin/bash
a=$(ffprobe -i c848a39afc54e04cc64ddd955686654b9b1c6f31 -show_entries format=duration
-v quiet -of csv="p=0");
b=1000;
result=$(($a*$b));
echo $result


Вывод


  ./sectomilisec: line 4: 23.760000*1000: syntax error: invalid arithmetic operator
(error token is ".760000*1000")


Как правильно умножить вывод операции на число?
    


Ответы

Ответ 1



invalid arithmetic operator (error token is ".760000*1000") в программе bash не реализована арифметика с плавающей точкой (только целочисленная). для осуществления таких вычислений придётся воспользоваться какой-то другой программой. например, bc: result=$(echo "$a*$b" | bc -l) или dc: result=$(echo "$a $b + p" | dc) подробности: bc: википедия, man bc, info bc dc: википедия, man dc, info dc. кстати, в этом выражении знаки доллара перед именами переменных не нужны: result=$(($a*$b)) достаточно (и более правильно) так: result=$((a*b))

Ответ 2



Правильная операция умножения выполняется вот так echo $[$a*$b] echo $[5*10] Если нужно умножать целое на вещественное то требуется выполнить команду result=$(echo "scale=4; $a*$b" | bc) scale - точность

Комментариев нет:

Отправить комментарий