Подзаголовок двух чисел с плавающей точкой в ​​сценарии оболочки

279
user

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

debit_amount=7.853117806000353E7 credit_amount=3223649.619999993  val1=$(printf "%f", "$debit_amount") val2=$(printf "%f", "$credit_amount")  echo " val1 = " $val1 echo " val2 = " $val2  final=`echo "$val1-$val2" |bc` 

Выход :

 val1 = 78531178.060004, val2 = 3223649.620000, (standard_in) 1: syntax error 

Я получил вышеуказанную ошибку. Я попробовал ниже команды, а также

final=$(echo "$val1 - $val2"|bc) echo "$(($val1-$val2))" echo `expr $val1 - $val2` 

Однако я все еще получаю синтаксическую ошибку. Я что-то пропустил?

0

1 ответ на вопрос

1
chaos

Уберите запятые в printfзвонках:

val1=$(printf "%f" "$debit_amount") val2=$(printf "%f" "$credit_amount") 

Не нужно разделять аргументы запятыми. Вот почему вход bcвыглядит так:

78531178.060004,-3223649.620000, 

который bcне может интерпретировать.


КСТАТИ : Вы не должны больше использовать backticks ( `) :

final="$(echo "$val1 - $val2" | bc)" 

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