Il existe, en PHP, un moyen simple d’afficher un nombre en notation scientifique (ex. : 1.2e+2) avec la fonction sprintf
:
echo sprintf('%e', $n);
Mais il n’existe pas de moyen simple d’afficher un nombre en notation ingénieur (ex. : 12.0e+3), j’ai donc créé une fonction qui retourne un nombre quelconque en notation ingénieur :
function number_format_eng($value, $digits = 3) {
if ($value == 0.0) return '0.' . str_repeat(0, $digits) . 'E+00';
$sign = ($value < 0 ? '-' : '');
$num = abs($value);
$e = floor( log($num) / log(1000) );
$mult = pow(1000, $e);
$num = adjust($num / $mult);
return $sign . number_format($num, $digits, '.', '') . 'E' . ($e >= 0 ? '+' : '-') . str_pad(abs($e * 3), 2, 0, STR_PAD_LEFT);
}
function adjust($value) {
if ($value < 1) {
return 1;
}
else if (($value < 10) and ($value > 9.999999999)) {
return 10;
}
else if (($value < 100) and ($value > 99.99999999)) {
return 100;
}
else {
return $value;
}
}
Le paramètre value
correspond à vote nombre à formater en notation ingénieur.
Le paramètre digits
correspond au nombre de chiffres que vous voulez après la virgule.
Mise à jour 05.01.2012 : La fonction proposée jusqu’ici ne retournait pas toujours le bon résultat. La version proposée à présent est une adaptation de la fonction de Gene Sullivan : http://search.cpan.org/~gsullivan/Number-FormatEng-0.01/lib/Number/FormatEng.pm