como adicionar calculadora linha de comando para bash que usa vírgula como marca decimal?

6

Como posso adicionar uma calculadora de linha de comando ao meu bash? Eu encontrei alguns, mas todos eles usam o ponto final como marca decimal , mas eu quero tê-lo para use a vírgula como marca decimal como a maioria do mundo faz, veja a imagem:

(fontewikipedia)

  • azul:pontofinal/período(.)
  • verde:vírgula(,)
  • vermelho:Momayyez(٫)
  • cinza:dadosindisponíveis

Osqueeuencontrei(todoscompontofinalcomomarcadecimal)sãoosseguintes,ondeessaslinhasdevemsercolocadasemseuarquivo~/.bashrc:

  1. Usandoobc,quetemavantagemdecalcularnúmerosridiculamentegrandes:

    calc(){bc-l<<<"$@"
    }
    
  2. Com awk, onde você tem nomes mnemônicos para funções trigonométricas e outras funções e você pode usar expoentes fracionários e você pode dar o expoente dos dois caracteres ** ao invés de, em alguns teclados, é difícil digitar ^ :

    calc () {
      awk "BEGIN { print $* ; }"
    }
    
por erik 23.01.2014 / 12:38

2 respostas

4

Eu encontrei uma solução.

calc () {
  awk '
    function asin(x) { return atan2(x, sqrt(1-x*x)) }
    function acos(x) { return atan2(sqrt(1-x*x), x) }
    function atan(x) { return atan2(x,1) }
    function tan(x) { return sin(x)/cos(x) }
    BEGIN { pi=atan(1)*4; print '"$(echo "$@" | tr , .)}" | tr . ,
}

Este aqui

  • aceita números como 5,2 ou 5,2 (isto é, ponto final e vírgula como marca decimal)
  • usa vírgula como marca decimal para a saída / solução
  • espaços e guias são removidos da entrada, ou seja, você pode inserir cálculos fáceis de ler como entrada
  • o número pi é definido por meio de 4 * atan (1)
  • algumas funções trigonométricas comuns são definidas
por 23.01.2014 / 12:38
4

Não há maneira confiável de implementar isso. O problema é que a vírgula é usada para separar argumentos quando mais de um é passado para uma função.

Se você não for usar essas funções, acho que a maneira mais simples seria algo como:

calc () {
  echo "scale=6;" "$@" | tr , . | bc -l | tr . ,
}

Isso dá:

$ calc 1 + 1
2
$ calc 1 / 3
,333333
$ calc "s(0,5)^2"   # sin(0.5)^2
,229848
$ calc "4*a(1)"     # PI
3,141592

Você pode, claro, aumentar a precisão decimal, que é aqui de 6 dígitos.

    
por 23.01.2014 / 13:00