After testing with PHP 7.2.8 x86 and x64 below are my observations.
The reason that
8,86468E+11 is being converted to
8 is because of PHP's type-casting behavior when a comma is used instead of a period as the decimal separator. See below:
echo (float) '8,86468E+11'; // 8 wrong echo (float) 8,86468E+11; // 88646800000000000 still wrong but getting close echo (float) '8.86468E+11'; // 886468000000 success! echo (float) 8.86468E+11; // 886468000000 success!
The primary issue for you is that your decimal separator is a comma instead of a period so to remedy this you will need to make use of
$my_num_from_csv = '8,86468E+11'; $my_num_from_csv = (float) str_replace( ',', '.', $my_num_from_csv ); echo $my_num_from_csv; //886468000000