Remova as vírgulas nas chamadas printf :
val1=$(printf "%f" "$debit_amount")
val2=$(printf "%f" "$credit_amount")
Não é necessário delimitar os argumentos por vírgula. É por isso que a entrada para bc ficou assim:
78531178.060004,-3223649.620000,
qual bc não pode interpretar.
BTW : você não deve usar os backticks ( ' ) mais :
final="$(echo "$val1 - $val2" | bc)"