Aller au contenu

Formuler une instruction shell de convertion de nombres


ferrari_frog
 Share

Messages recommandés

Bonjour,

J'ai un casse-tête - pour moi - à vous soumettre  :

Cette instruction qui convertit un nombre en notation scientifique vers le decimal :

echo "5.083E+9" | awk -F"E" '{print $1 * ( 10 ^ $2)}'

fonctionne dans le terminal et me donne cette réponse : 5000000000

mais je ne sais comment l'inclure dans un appel au shell Unix.

 

Par exemple :

Dim sh as new shell
Dim result as string
sh.execute "echo "5.083E+9" | awk -F"E" '{print $1 * ( 10 ^ $2)}'"
result = sh.result

ne fonctionne pas.

Comment la reformuler dans le sh.execute pour qu'elle fonctionne ?

Merci de votre attention.

 

EDIT :

Je crois avoir trouvé :

  dim sh as new shell
  dim result as string
  sh.execute "echo "+str(5.083E+9)+" | awk -F"+"E+"+" '{print $1 * (10 ^ $2)}' "
  result=sh.result
  textarea1.text=result

Cela fonctionne et me donne : 5083000000, plus exact que par le terminal, lequel me dit : 5000000000

Est-ce la meilleure solution et pourquoi cette différence ?

Modifié par ferrari_frog
Lien vers le commentaire
Partager sur d’autres sites

Je pense que ton souci est lié aux guillemets, tu devrais essayer les apostrophes ou alors de passer les guillemets au shell via chr(je-ne-sais-plus-combien)…

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup mais je vais garder cette solution qui fonctionne :

sh.execute "echo "+str(5.083E+9)+" | awk -F"+"E+"+" '{print $1 * (10 ^ $2)}' "

J'envoie les choses entre guillemets en mettant des +

Lien vers le commentaire
Partager sur d’autres sites

Oui mais par expérience, ce n'est pas forcément la bonne méthode car l'instruction sh.execute peut croire à tout moment qu'un guillemet est la fermeture de l'instruction et non pas inclus dans la chaîne à traiter au shell…

Lien vers le commentaire
Partager sur d’autres sites

Pourquoi tu as un résultat plus précis : parce que Xojo transforme to nombre 5.083E+9 en 5083000000 lors de la conversion en string.


Dans ta ligne de commande si tu fais juste le echo tu auras déjà 5083000000.


 


Au fait, bash ne gère absolument pas les nombres à virgules. A priori bc devrait être l'outils à utiliser ( http://stackoverflow.com/questions/12722095/how-can-i-get-a-float-division-in-bash )


Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
 Share

×
×
  • Créer...