Pular para o conteúdo

Notação científica em SHELL SCRIPT [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 18/12/2014 - 12:27h

Olá pessoal!

Hoje estou com uma dúvida, porque quero escrever números muito grande em notação científica.
Tipo:

0.00004 --> 4E-4
1200000 --> 1.2E+6
ETC.

Se alguém poder me ajudar a resolver este problema ficarei muito grato!

Responder tópico

2. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Melhor resposta

Enviado em 18/12/2014 - 18:11h

Amigo , vc pode fazer usando o printf do próprio bash :

Seria algo desse tipo


#!/bin/bash

# Nota : Não foi testado!

num=500500

printf "%e" "$num"

Espero ter ajudado

[]'s

T+

3. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 18/12/2014 - 15:18h

Eu conheço três opções:

1. Usar o interpretador da linguagem AWK, exemplo:

$ awk 'BEGIN{print 4E-4; print 1.2E+6}'

2. Usar o interpretador da linguagem Perl, exemplo:

$ perl -wE'say 4E-4; say 1.2E+6'

3. Usar o zsh, exemplo:

$ echo $(( 4E-4 )); echo $(( 1.2E+6 ))

Obs.: Deve existir mais opções de fácil acesso.

4. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 18/12/2014 - 17:17h

Muito obrigado por sua contribuição!
Mas em BASH?

5. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 18/12/2014 - 17:55h


Mas em BASH?
Se você tivesse consultado manual ou mesmo o info saberia que não é possível usar essa notação diretamente. A aritmética do bash trabalha apenas com números inteiros. Caso realmente queira fazer em bash, não diria que é impossível mas sem dúvidas não é viável na maioria dos casos. Precisaria construir um parser para analisar os números e transformá-los em frações de números inteiros apenas, depois disto, proceder com os cálculos não esquecendo de aplicar as regras de aritmética com frações.

Daria para usar algumas ideias daqui:

http://tecnoveneno.blogspot.com/2011/10/bash-aritmetica-de-ponto-flutuante.html

para atingir este objetivo.

Boa sorte!

6. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 18/12/2014 - 18:42h

Thihup escreveu:

Amigo , vc pode fazer usando o printf do próprio bash :

Seria algo desse tipo


#!/bin/bash

# Nota : Não foi testado!

num=500500

printf "%e" "$num"



Espero ter ajudado

[]'s

T+
Se o problema era converter para notação científica, usar o 'printf' é uma ótima solução.

7. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 18/12/2014 - 18:48h

Postei a outra forma apenas para mostrar no terminal , caso queira guardar em uma var , apenas fazer isso :


#!/bin/bash

# Nao foi testado

numDec=5000
numCientifico=$(printf "%e" "$numDec" )
Espero ter ajudado

[]'s

T+

8. bash: printf: 0.00002: invalid number

Enviado em 19/12/2014 - 02:16h

Olá pessoal! Encontrei um probleminha quando usei o comando printf:


beowulf@beowulf:~$ x=0.00002
beowulf@beowulf:~$ echo "$(printf "%E" "$x")"
bash: printf: 0.00002: invalid number
0,000000E+00
beowulf@beowulf:~$ y=0,00002
beowulf@beowulf:~$ echo "$(printf "%E" "$y")"
2,000000E-05
Ou seja, ele não reconhece o ponto(.) como separador decimal.
Se vocês poderem me ajudar ficarei muito mais agradecido!

9. Re: Notação científica em SHELL SCRIPT [RESOLVIDO]

Enviado em 19/12/2014 - 10:00h

passosfil escreveu:

Olá pessoal! Encontrei um probleminha quando usei o comando printf:


beowulf@beowulf:~$ x=0.00002
beowulf@beowulf:~$ echo "$(printf "%E" "$x")"
bash: printf: 0.00002: invalid number
0,000000E+00
beowulf@beowulf:~$ y=0,00002
beowulf@beowulf:~$ echo "$(printf "%E" "$y")"
2,000000E-05
Ou seja, ele não reconhece o ponto(.) como separador decimal.
Se vocês poderem me ajudar ficarei muito mais agradecido!


O Shell eh estranho mesmo.

Ele usa a ',' como separador decimal.

O "printf" já é um comando com saída no stdout , então não é necessário usar echo $(printf "%s\n" "Sou inexperiente usando o Printf " , podendo usar apenas printf "%s\n" "Sou inexperiente usando o Printf "

Estude por aqui : http://wiki.bash-hackers.org/commands/builtin/printf

[]'s

T+

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder