@Rsah

Работа с длинным float в php. Как улучшить скрипт?

Здравствуйте. Помогите советом.

Я запрашиваю из облачной базы некоторые значения. Приходят числа ответ в научной нотации в виде строки "-2.726754802539826e+001" (пример числа).
Задача сделать из этих чисел числа с фиксированной точкой, округленные до 14 знаков после запятой либо меньше такие как "-2.72679480253983"(измененный пример) или "0.001233" или "1444.3" (если взять другие числа за основу)

у меня есть сомнения, что мой код это велосипед:
if (is_numeric($value)) {
    $needle   = 'e';

    if(strripos($value, $needle) === false){
        $value =(int)$value;
    }else{
        $chunks = explode($needle, $value);
        $value = $chunks[0];
        $mantissa = (int)$chunks[1];

        $chunks = explode('.', $value);
        $integer = $chunks[0];

        $isNegative = false;
        if ($integer < 0){
            $isNegative = true;
            $integer = abs($integer);
        }

        $fractional = $chunks[1];
        if ($integer == 0 && $fractional == 0) {
            $value =(int)$value;
        }else{
            // shift numbers with $mantissa
            if ($mantissa > 0) {
                //saving number for transfer into $integer
                $trans = substr($fractional, 0, $mantissa);

                $fractional = substr($fractional, $mantissa);
                $integer = $integer . $trans;
            } elseif ($mantissa < 0){
                $integer = str_repeat("0", abs($mantissa)) . $integer;

                $trans = substr($integer, $mantissa);

                $integer = substr($integer,0, $mantissa);
                $fractional = $trans . $fractional;
            }

            $fractional = intval(round($fractional, -1));
            $value = $integer . "." . $fractional;

            // removing all zeros
            $value = trim($value, "0");

            // if $integer is 0
            if($value{0} == "."){
                $value = "0" . $value;
            }

            // removing excess dot if $fractional is 0
            if(substr($value, -1) ==  "."){
                $value = substr($value,0, -1);
            }

            if($isNegative){
                $value = "-" . $value;
            }
        }
    }
}


буду рад любым идеям!
  • Вопрос задан
  • 389 просмотров
Пригласить эксперта
Ответы на вопрос 2
OKyJIucT
@OKyJIucT
Sunshine reggae
$val = -2.726754802539826e+001;
echo round($val, 14); // -27.267548025398
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
Читать документацию не пробовали?
echo (float) "-2.726754802539826e+001"; выводит -27.267548025398
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы