2012-11-06 2 views
0

Je veux écrire un tableau de nombres à virgule flottante en fichiersComment faire en sorte que les chiffres ne soient pas affichés sous une forme scientifique?

<?php 
$x=[0.000455,0.000123,0.00005690330203]; 
$fname='test.txt'; 
$str=''; 
foreach($x as $elem){ 
$str .= "$elem\n"; 
    } 
file_put_contents($fname,$str); 
?> 

mais dans le test.txt, je vois

0.000455 
0.00
5.690330203E-5 

Je ne veux pas le numéro de point de flotteur à afficher en forme scientifique/exponentielle, j'espère qu'ils gardent la forme originale, en outre, il y a aussi de grands entiers comme 12430120340 donc si j'utilise un format spécial pour les nombres à virgule flottante, comme 0.00 alors peut-être qu'il ne convient pas aux grands entiers, peut-être convertir eux en stri ngs pourrait être une bonne idée? mais comment?

+0

que voulez-vous dire par forme originale? Donne un exemple. –

+1

Dans ce cas, il/elle signifie: '0.00005690330203' au lieu de '5.690330203E-5' – nickhar

+0

oui, nickhar est juste – user1769686

Répondre

1

Vous pouvez utiliser la fonction number_format pour définir une précision:

Exemple:

$mynum = 24.2837162893; 
$mynum = number_format($mynum, 2); 
echo($mynum); 

// Outputs 24.28 

Donc, si vous décidez que vous voulez que tous vos numéros d'avoir 10 décimales, vous utilisez simplement $mynum = number_format($mynum, 10); .

Également, voir la fonction sprintf() pour d'autres options de formatage.

[EDIT]

Dans votre exemple particulier, voici où vous utiliserez cette fonction:

<?php 
    $x=[0.000455,0.000123,0.00005690330203]; 
    $fname='test.txt'; 
    $str=''; 
    foreach($x as $elem){ 
     $str .= number_format($elem, 5) . "\n"; 
    } 
    file_put_contents($fname,$str); 
?> 

Comme décrit dans l'autre réponse, valeurs à virgule flottante sont par nature imprécises. Vous devez décider quelle précision est importante pour vous dans votre cas d'utilisation.

Ref: http://php.net/manual/en/function.number-format.php

+0

Je veux les imprimer dans des fichiers, pas echo $ var – user1769686

+0

Voir ma modification ci-dessus. –

+0

et parfois 10 est un peu gros mais parfois, 10 est un peu petit, il est variable. – user1769686

0

Il est à noter qu'il n'y a pas une telle chose comme « forme originale », comme le flotteur est déjà une chose différente littérale que la représentation interne. Les flottants sont par nature imprécis dans le contexte de la programmation, et beaucoup de nombres flottants n'ont pas de forme spécifique qui peut être représentée en décimal. C'est pourquoi le mieux que vous pouvez faire est de définir une sorte de précision sur eux, comme indiqué dans le other answer.

Ce n'est pas lié à PHP mais à la programmation en général.

Si vous avez les mêmes choses stockées sous forme de chaînes et non comme flotteurs, par exemple:

$x  = ['0.000455', '0.000123', '0.00005690330203']; 
$fname = 'test.txt'; 
$str = ''; 

foreach($x as $elem) { 
    $str .= "$elem\n"; 
} 

file_put_contents($fname, $str); 

alors vous devriez avoir aucun problème dans l'impression ou les écrire dans un fichier.

+0

alors comment les convertir en chaînes, il existe des entiers, des nombres flottants dans un tableau avec une longueur variable – user1769686

+0

@ user1769686 nombre_format() montré dans l'autre réponse fait juste cela, convertissez-le en une chaîne. Mon point est que si vous avez besoin d'un "formulaire original", ils devraient être des cordes pour commencer.Si vous avez les originaux comme flottants, il n'y a pas de forme originale (base-10), et vous devez choisir vous-même ce que vous voulez représenter. Vous avez déjà perdu votre formulaire d'origine et il n'y a pas de moyen exact de le récupérer: vous ne pouvez que deviner. Le "10" dans l'autre réponse est ce genre de supposition. – eis

Questions connexes