Раунд № с точностью 1% и преобразование в научное обозначение

У меня миллионы длинных номеров (5216672577) в файлах данных CSV, и я хотел бы уменьшить размер файла. Я планирую сделать это, округляя как можно больше завершающих цифр до 0, оставаясь в пределах X% точности к оригинальному номеру. Тогда я переведу цифры в научную запись. Я предпочитаю формат 103e7 в 1.03E+7, Символы точки и плюс добавляют ненужные байты. Я работаю с целыми числами.

Обновление — я получил его на работу:

for($i = 9000; $i < 11000; $i++) {
echo notation($i), "\r\n<br>";
}

// Round and abbreviate an integer
function notation($int, $precision=0.01) {
// We cannot shorten small numbers
if(is_int($int) && $int >= 1000) {
$best = $int;

// For each decimal place
$l = strlen($int);
for($i = 3; $i <= $l - 1; $i++) {

// Round to the deciaml place
$newInt = round($int, -$i);

// Check precision
$ratio = $int / $newInt;
if($ratio < (1 - $precision) || $ratio > (1 + $precision)) {
break;
}

// Save the best option
$best = $newInt;
}

// Count and remove trailing zeros
$l = strlen($best);
$best = rtrim($best, '0');
$i = $l - strlen($best);

// Check that we can actually shorten the int
if ($i >= 3) {
// Add scientific Notation
return $best . 'e' . $i;
}
}
return $int;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]