Здравствуйте. Помогите советом.
Я запрашиваю из облачной базы некоторые значения. Приходят числа ответ в научной нотации в виде строки
"-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;
}
}
}
}
буду рад любым идеям!