2010-12-04 6 views
3

Lorsque je publie certaines de mes variables doubles, elles sont écrites sous forme exponentielle à l'aide de fwrite. Puis-je définir des valeurs par défaut dans PHP où chaque fois qu'une variable est affichée (copiée ou stockée), il arrive toujours au format décimal?Sortie de nombres PHP sous forme exponentielle

Pour être précis le problème se produit lorsque j'utilise la méthode json_decode sur une chaîne json qui contient une valeur double (qui n'est pas sous forme exponentielle). Cette double valeur après la conversion d'un objet devient exponentielle.

Répondre

1

En supposant que les chiffres sont encore des flotteurs en cours d'écriture (par opposition à cordes), c'est une façon de le faire:

echo rtrim(sprintf("%0.15f", $x), "0."); 

Je ne sais pas s'il y a un moyen plus propre ou non. Mais fondamentalement, cela utilise sprintf pour imprimer un maximum de 15 décimales, puis supprime tous les caractères 0 ou .. (Bien sûr, il n'y a aucune garantie que tout sera arrondi bien avec zéros que vous pourriez attendre.)

Si vous voulez juste une taille fixe, vous pouvez régler le 15 et retirez le rtrim.

2

J'ai eu un problème similaire où json_decode convertissait des identifiants twitter/tweet récents en nombres exponentiels.

Je l'ai résolu par upping précision de flotteur de PHP, ce qui peut être fait différentes façons ... quelques

  • trouver la valeur precision dans votre php.ini et de changer à precision = 20
  • ajouter à ini_set('precision', 20); votre application PHP
  • ajouter php_value precision 20 à votre .htaccess application ou le fichier hôte virtuel

Sinon, si vous êtes bien avec HAV votre BIGINT converti ing en chaîne et vous avez PHP 5.3+, vous pouvez également passer un drapeau à json_decode comme ceci: json_decode($json, true, 512, JSON_BIGINT_AS_STRING)

+0

En fait: '5.4.0 \t Le paramètre options était added.' - il est donc 5.4+ Mais la chose de précision - c'est une bonne idée :) – LeonardChallis

Questions connexes