[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Округление до 4 значащей цифры
Страницы: 1, 2
DySprozin
round_zn работает вроде исправно, но не работает с отрицательными числами, а вот round_to лажает... попробуйте на досуге:

round_to(999.95, 4);

зависнет...

_____________
Господа! Я ненавижу выканье на форумах, обращайтесь ко мне на ты.
Господа! Я буду тоже тыкать, но если это так кого-то из вас коробит, пожалуйста, предупреждайте меня об этом
---
Можешь помочь — помоги, не можешь — попытайся, не хочешь — уйди.
DySprozin
Игорь_Vasinsky
химия зах0вала мозг Спрозина (; вот сейчас у себя на работе поставил на ноут vbox c апачем и php, так что скоро снова вольюсь. Буду так-скать прогать между колб и пробирок (;

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

function round_zn($val, $to) {
if ($val < 0) $n = -1;
else $n = 1;
$val = $val * $n;
$mn=0;
while ($val<0.1) {
$val *= 10;
$mn--;
}
while ($val>1) {
$val /= 10;
$mn++;
}
$val = round($val, $to);
if ($mn!=0) $val *= pow(10,$mn);
return $val * $n;
}


теперь работает и с отрицательными числами (;
почему виснет последняя функция (round_to) - пока нет времени разбираться, на досуге займусь (;

_____________
Господа! Я ненавижу выканье на форумах, обращайтесь ко мне на ты.
Господа! Я буду тоже тыкать, но если это так кого-то из вас коробит, пожалуйста, предупреждайте меня об этом
---
Можешь помочь — помоги, не можешь — попытайся, не хочешь — уйди.
Guest
Цитата (DySprozin @ 31.08.2012 - 21:36)
теперь работает и с отрицательными числами (;
почему виснет последняя функция (round_to) - пока нет времени разбираться, на досуге займусь (;

Давненько я её поправил, только что-то сюда не закинул. В моём варинте так:
function round_to($val, $to) {
$mn=0;
$znak=1;
if ($val==0) {
return 0;
}
else if ($val<0) {
$znak=-1;
$val = -1*$val;
}
while ($val<0.1) {
$val *= 10;
$mn--;
}
while ($val>1) {
$val /= 10;
$mn++;
}
$val = round($val, $to);
if ($mn!=0) $val *= pow(10,$mn);
$val = $znak*$val;
return $val;
}

Зависает потому, что там бесконечный цикл, abs_val никак не изменится, хе-хе, хоть чё хошь с val делай. А round_zn на нуле, например, зависнет.
Быстрый ответ:

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