php- floating point number shown in exponential form

Viewed 16924

Could anyone please tell me why this happens,

$a  = 0.000022

echo $a // 2.2E-5

What I want to see is 0.000022 not 2.2E-5

4 Answers

use number_format() function

echo number_format($a,6,'.',',');

the result would be 0.000022

Try this:

function f2s(float $f) {
    $s = (string)$f;
    if (!strpos($s,"E")) return $s;
    list($be,$ae)= explode("E",$s);
    $fs = "%.".(string)(strlen(explode(".",$be)[1])+(abs($ae)-1))."f";
    return sprintf($fs,$f); 
}

You can apply the solution below if you want to filter data for such cases (for example, data from SQLite is returned in exponential form).

function exponencial_string_normalize($value) {
  if (is_string($value) && is_numeric($value))
    if ($value !== (string)(int)$value && $value[0] !== '0')
      return rtrim(substr(number_format($value, 14), 0, -1), '0'); # with suppression of the rounding effect
  return $value;
}

var_dump( exponencial_string_normalize(-1)        === -1           );
var_dump( exponencial_string_normalize(-1.1)      === -1.1         );
var_dump( exponencial_string_normalize('1234')    === '1234'       ); # normal notation      (is_numeric === true)
var_dump( exponencial_string_normalize('1.23e-6') === '0.00000123' ); # exponential notation (is_numeric === true)
var_dump( exponencial_string_normalize('4.56e-6') === '0.00000456' ); # exponential notation (is_numeric === true)
var_dump( exponencial_string_normalize('01234')   === '01234'      ); # octal notation       (is_numeric === true) !!! conversion to number will be incorrect
var_dump( exponencial_string_normalize('0b101')   === '0b101'      ); # binary notation      (is_numeric === false)
var_dump( exponencial_string_normalize('0x123')   === '0x123'      ); # hexadecimal notation (is_numeric === false)
var_dump( exponencial_string_normalize('а123')    === 'а123'       );
var_dump( exponencial_string_normalize('123а')    === '123а'       );
var_dump( exponencial_string_normalize(true)      === true         );
var_dump( exponencial_string_normalize(false)     === false        );
var_dump( exponencial_string_normalize(null)      === null         );
var_dump( exponencial_string_normalize([])        === []           );
Related