JeuWeb - Crée ton jeu par navigateur
Format d'affichage resultat division très petite - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Format d'affichage resultat division très petite (/showthread.php?tid=5296)

Pages : 1 2 3 4 5


RE: Format d'affichage resultat division très petite - Anthor - 09-03-2011

Elles te plaisent toujours pas les 2 fonctions qui marchent ?


RE: Format d'affichage resultat division très petite - Argorate - 09-03-2011

Smile


$a = 0.000000002315452788124510150546046029505;

function floatToString($float)
{
$floatExtraAppend = '';
$internalPrecision = (int) ini_get('precision');
$floatExtraPrecision = (int) floor(log10(abs($float)));

$floatTotalDecimals = (int) $internalPrecision - $floatExtraPrecision;

if($floatTotalDecimals < 0)
{
$float *= pow(10, $floatTotalDecimals);
$floatExtraAppend = str_repeat('0', -$floatTotalDecimals);
$floatTotalDecimals = 0;
}

return number_format($float, $floatTotalDecimals, '.', '') . $floatExtraAppend;
}


function afficher_decimal($nombre_initial)
{
$nombre_string = (string) $nombre_initial;
$tableau_fragment = explode('E-',$nombre_string );
$nbr_decimal = strlen( $tableau_fragment[0] ) + (int) $tableau_fragment[1] ;
return sprintf('%.'.$nbr_decimal.'f', $nombre_initial);
}

echo floatToString($a); //0.00000000231545278812451
echo afficher_decimal($a); //0.000000002315452788124510
echo $a; //0.000000002315452788124510150546046029505

Le chiffre est peut être trop grand? ça expliquerais pourquoi les deux fonction s'arrête avant?
Par contre, afficher_decimal() donne 1 chiffre de plus, ta fonction enlève les 0 inutiles en bout de chaine j'imagine, et vu que le nb n'a pas été stocker en entier car trop grand, du coup ça considère le dernier 0 comme inutile, tu me corriges si je me trompe.

Je vais me résoudre à utiliser ces fonctions, mais ça m'embête de pas trouver ce paramètre, je suis sur que ça dois exister...
Je vois pas pourquoi au delà de cinq 0 après la virgule, il convertit en notation scientifique, y a forcement une variable ou un truc qui contient ce "5", il invente rien...

Bref, si jamais qq'un en apprend plus, je suis preneur Wink


RE: Format d'affichage resultat division très petite - Anthor - 09-03-2011

La précision c'est le nombre de chiffres après la virgule avant que PHP n'arrondisse.
La notation scientifique c'est une base 10 pour afficher de façon plus courte les grands nombres.

Les deux n'ont donc strictement rien à voir. Tu mélanges tout et rien ici.
La notation scientifique est complétement normale, et reste un float/int/double à part entière et non un string. On ne met pas de guillemet autour, on peux calculer avec... C'est juste une autre représentation des grands nombres. Il n'y a donc pas de paramètres.

Et quand je parle des deux fonctions, je ne parle pas de la fonction qui prend en compte qu'une moitié des cas et retourne des notices... Je parle de la fonction prises dans les sources de Zend.


/**
* Convert a scientific notation to float
* Additionally fixed a problem with PHP <= 5.2.x with big integers
*
* @param string $value
*/
public static function floatalize($value)
{
$value = strtoupper($value);
if (strpos($value, 'E') === false) {
return $value;
}

$number = substr($value, 0, strpos($value, 'E'));
if (strpos($number, '.') !== false) {
$post = strlen(substr($number, strpos($number, '.') + 1));
$mantis = substr($value, strpos($value, 'E') + 1);
if ($mantis < 0) {
$post += abs((int) $mantis);
}

$value = number_format($value, $post, '.', '');
} else {
$value = number_format($value, 0, '.', '');
}

return $value;
}



RE: Format d'affichage resultat division très petite - Myrina - 09-03-2011

ce n'est pas le "5" qu'il faut chercher mais plutôt la limite pour la mantisse:
http://fr.php.net/manual/en/language.types.float.php
et de manière plus générique:
http://fr.wikipedia.org/wiki/IEEE_754


RE: Format d'affichage resultat division très petite - Argorate - 09-03-2011

En effet, j'ai essayé de caster en "double" pour voir, mais ça n'a rien fait, ce qui est normal puisque lorsque j'ai chercher un peu (http://www.php-mysql-tutorial.com/wikis/php-tutorial/php-variable-types.aspx) j'ai vu que le double n'étais pas dispo en php.

Du coup je ne comprend pas comment on stock un grand nombre en php? On est obligé de tricher en convertissant la chose en String?!

Anthor: la dernière fonction que tu proposes se rapproche de se que j'avais en tête, mais du coup j'avais pas pensé qu'étant donné qu'il traite la chaine de la forme "1.5452788124351E-6" il ne mettra pas plus de chiffre significative que ça, alors que mon nombre de base peut être plus grand...

bref, on atteint la les limites techniques en fait...

Donc, ça ira très bien en l'occurrence.

Merci Wink


RE: Format d'affichage resultat division très petite - Anthor - 09-03-2011

Oui tu atteins les limites ( et encore, faut y aller ^^ ), pour stocker par contre pas de problème à priori, ton problème en l'occurrence est uniquement de l'affichage ^^
Puisque comme je te l'ai dit, au niveau interne ça reste un float sur lequel tu peux travailler.

MySQL aussi utilise une notation semblable, et je ne pense pas que les deux soient incompatibles, à tester.


RE: Format d'affichage resultat division très petite - niahoo - 09-03-2011

« Si j'avais voulu être pédant, j'aurais pas simplifié en 5 lignes pour vos beaux yeux, voir comme beaucoup depuis quelques mois, je vous aurais laissé dans votre merde... 2 fonctions de math niveau seconde, c'est pas excessif à mon sens. »

Et bien, tu te prends pas pour n'importe pour estimer nous sortir « de notre merde » avec tes super pouvoirs d'être supérieur ...

désolé d'être chiant sinon, mais quand rarement j'aide quelqu'un sur ce forum j'essaie de ne pas être condescendant.


RE: Format d'affichage resultat division très petite - Argorate - 09-03-2011

Dispute.TimeUp();
Topic.Close();
//Vous m'avez tout les deux aidé, avec des approches différentes, et c'est se que je voulais, fin de l'histoire Wink


RE: Format d'affichage resultat division très petite - niahoo - 09-03-2011

spafo!


RE: Format d'affichage resultat division très petite - srm - 09-03-2011

C'est bien compliqué tout ça alors qu'il suffit de faire ça :

<?php

$a = 0.0000017682711283366;
echo sprintf('%.' . (strlen($a)+1) . 'f', $a);

Edit : c'est juste pour remettre Anthor à sa place lol