Страницы

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

четверг, 31 января 2019 г.

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

Возникла необходимость перевести секунды в милисекунды. Скрипт:
#!/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")
Как правильно умножить вывод операции на число?


Ответ

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))

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

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