[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Округление до 4 значащей цифры
Страницы: 1, 2
DySprozin
<?php

function
r4($r) {
$d = explode('E', $r);
if (!isset($d[1])) $d[1] = 0;
$e = '';
$ro = 4; //до какого знака после запятой округлять
$zp = false; //есть ли запятая
//счетчик, кол-во знач. цифр, проверка на знач. цифру

for ($i = 0, $j = 0, $zn = false; $i < strlen($d[0]); $i++) {
$e .= $d[0][$i];
if ($d[0][$i] == '.') {
$zp = true;
if ($d[0][0] != 0 && $i < 4) $ro = 4 - $i;
elseif ($d[0][0] != 0 && $i >= 3) $ro = -1;
continue;
}
if ($d[0][$i] == 0 && $zp == true && $d[0][0] == 0 && $j == 0) $ro++;
if ($d[0][$i] == 0 && $zn == false) continue;
if ($d[0][$i] != 0 || $zn == true) {
$j++;
$zn = true;
}
if ($j > 4) {
if ($zp == false) $ro = -1;
if (strpos($e, '.') !== false) $tmp = '.0';
else $tmp = '';
$e = round($e, $ro);
$e .= 'E'.$d[1];
$e .= $tmp;
for ($k = $i + 1; $k < strlen($d[0]); $k++) {
if ($d[0][$k] == '.') break;
$e .= 0;
}
break;
}
}

return $e*1;
}


код местами возможно ужасен, вопрос сейчас не в оптимизации, а в том, работает ли функция правильно. Потестите, кому не в лом, плиз (;

Итак
Что должна делать:
Округлять числа до 4-й значащей цифры. Отличие от round и проч состоит в том, что эта функа округляет не до 4-го знака после запятой (к примеру), а именно до 4-й значащей цифры. Т.е. 65636 округлит до 65640, а 0.0000055678 округлит до 5.568E-6.

Что делает:
Вроде делает то, что должна (;

Что требуется:
Потестить функцию для разных чисел. Я вроде тестил, работает...

Для чего функция может быть полезна:
Для инженерных расчетов - часто требуется округлять до 4-й значащей цифры (не путать с 4 цифрой после запятой!).

Что планируется в перспективе:
Доработать функцию, чтобы округляла до n-й значащей цифры

_____________
Господа! Я ненавижу выканье на форумах, обращайтесь ко мне на ты.
Господа! Я буду тоже тыкать, но если это так кого-то из вас коробит, пожалуйста, предупреждайте меня об этом
---
Можешь помочь — помоги, не можешь — попытайся, не хочешь — уйди.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.