Forum Programmation.php format numérique des données sous php

Posté par  (site web personnel) .
Étiquettes : aucune
0
24
oct.
2005
Salut,

j'ai écris un script php que vous pouvez trouver ici :
http://kobold.myftp.org/math/ecriture_science.php

Le but est pour l'élève d'écrire des nombres du style 0,00012 en 1,2E-4
Le script compare la réponse de l'élève avec une réponse qu'il calcule lui même.

Mon problème est le suivant :
dès qu'un nombre est trop petit (typiquement 1E-5) ou trop grand (typiquement 1E10), l'affichage dans la page web de ce nombre est fait sous la forme scientifique. c'est à dire déjà sous la forme 1,2 E-4

Je voudrais donc forcer php à afficher les nombres dans un format décimales uniquement. (et acecssoirement avec une virgule et non pas un point .)

des idées ?
  • # yo

    Posté par  . Évalué à 2.

    RTFM :

    spécifier la virgule comme séparateur
    http://www.nexen.net/docs/php/annotee/function.setlocale.php

    utiliser printf avec %f comme formateur (qui utilise la locale)
    http://www.nexen.net/docs/php/annotee/function.printf.php
    • [^] # Re: yo

      Posté par  (site web personnel) . Évalué à 1.

      hé bien, voilà une réponse clair concise et efficace.
      Mon foutu manuel n'est pas aussi précis que celui-ci ! ;)

      Sinon, je vois que dans la local française, le séparateur des milliers n'est pas un espace mais un "rien". dommage non ?
      On peut corriger ça ?
      • [^] # Re: yo

        Posté par  (site web personnel) . Évalué à 1.

        bon je me réponds à moi même

        printf ou sprintf ne me done pas le formatage que je veux. il y a un soucis avec le traitement des décimals.
        j'ai donc utilisé ça :
        $nombre_formate = number_format($nombre_alea, 2, ',', ' ');


        c'est super bien mais ça m'oblige à spécifier un nombre de décimals, or je ne veux pas spécifier ce nombre.
        comment faire ?
        ou que dois-je utiliser à la place ?
        • [^] # Re: yo

          Posté par  . Évalué à 1.

          normalement
          printf("%f", $val)
          doit forcer l'affichage en scientifique, non ?
          • [^] # Re: yo

            Posté par  (site web personnel) . Évalué à 1.

            oui mais justement je ne veux pas qu'il soit en mode scientifique.
            et d'ailleurs (bon j'ai testé beaucoup d'options cet après midi , je ne sais plus trop) %f, fait afficher en mode float, c'est à dire avec 5 ou 6 zéros après la virgule même s'ils sont inintéressants.
    • [^] # setlocale fait planter mon script

      Posté par  (site web personnel) . Évalué à 1.

      J'avais mis ça dans mon script :
      setlocale(LC_ALL, 'fr_FR@euro') ;

      et dans la foulée la fonction abs ()
      s'et smis à faire n'importe quoi et à considérer que les nombres que je lui donnais étaient des entiers et non plus des nombres à virgules
      ainsi tout les nombres compris entre -1 et 1 renvoyaient 0

      abs (-0,00012) = 0


      bon allez, hop j'ai viré la locale !
      • [^] # Re: setlocale fait planter mon script

        Posté par  . Évalué à 1.

        il me semble que la locale n'affecte que les fonctions d'affichage et/ou d'export dans un fichier. tout le reste des utilisations de constante doit se faire comme dans la norme du langage PHP : pas de séparateur de milliers et le point comme séparateur décimal. Tu dois donc demander
        abs(-0.00012)
        • [^] # Re: setlocale fait planter mon script

          Posté par  (site web personnel) . Évalué à 1.

          ha oui, mais là n'est pas le problème.
          le script génère un nombre décimal, et en prend la valeur absolu.
          il n'y a aucune intervention de ma part sur ce nombre.

          je génère un nombre aléatoire.
          je le transmet via un formulaire. le script le récupère et prend sa valeur absolue.
          et là.... c'est le drame.

          Dès que j'enlève la variable setlocale, ça fonctionne de nouveau parfaitement.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.