double myNum = .912385;
int precision = 10000; //keep 4 digits
myNum= Math.floor(myNum * precision +.5)/precision;
Используя flush
и / или ob_flush
, вы должны получить то, что хотите.
Вот быстрая демонстрация:
for ($i=0 ; $i<10 ; $i++) {
echo "$i<br />";
ob_flush();
flush();
sleep(1);
}
Каждая секунда, номер будет отправлен в браузер, не дожидаясь завершения цикла / сценария. (Без флеша и ob_flush
он ждет, пока конец скрипта не отправит результат).
Объяснение, почему вам нужны оба, цитирование со страницы флеша в manual:
Сбрасывает буферы записи PHP и любые внутренние серверы PHP (CGI, веб-сервер и т. д.). Это пытается полностью вытолкнуть текущий вывод в браузер с помощью нескольких предостережений.
flush () не может переопределить схему буферизации вашего веб-сервера и не влияет на клиентскую сторону буферизации в браузере. Он также не влияет на механизм буферизации вывода пользовательского пространства PHP. Это означает, что вам придется вызывать оба ob_flush () и flush (), чтобы очистить выходные выходные буферы, если вы их используете.
blockquote>Если это не работает для вас, взглянув на комментарии на двух страницах руководства, вы можете дать пару указателей на тему «почему это может не получиться»
Да, ob_flush должен это сделать. Я делаю это все время на странице LOOONG, когда я хочу посмотреть ход выполнения операции.
ob_end_flush http://us.php.net/ob_end_flush
Эта функция опустошает выходной буфер и отключает буферизацию вывода. Все после этой функции сразу отправляются в браузер.