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

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

Iago Lira
iagolira

(usa Debian)

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!


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

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]

Perfil removido
removido

(usa Nenhuma)

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]

Iago Lira
iagolira

(usa Debian)

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]

Perfil removido
removido

(usa Nenhuma)

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]

Perfil removido
removido

(usa Nenhuma)

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]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

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

Iago Lira
iagolira

(usa Debian)

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]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

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+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts