Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Округление числа до двух цифр после запятой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Grozny
Отправлено: 06 Января, 2016 - 17:05:46
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Есть скрипт, который собирает данные курсов валют.

PHP:
скопировать код в буфер обмена
  1. <?PHP $xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y'));
  2. echo $xml->Valute[15]->Value; ?>


Значение выводится такое: 11,2304

Как округлить его до 11,23 ?

Если использовать функцию echo round(число, округление); то как вместо числа вставить весь этот скрипт? Или только значение Value ?
 
 Top
Viper
Отправлено: 06 Января, 2016 - 19:04:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo round(str_replace(',', '.', $xml->Valute[15]->Value), 2);


PS! PHP doesn't handle strings like "12,300.2" correctly by default.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Prizma
Отправлено: 07 Января, 2016 - 09:38:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Рекомендую использовать вместо "echo round", "echo sprintf()" и выводить числа в нужном формате например вот так:
PHP:
скопировать код в буфер обмена
  1. $xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y'));
  2. echo sprintf("Валюта: %01.2f", $xml->Valute[15]->Value);
 
My status
 Top
Viper
Отправлено: 07 Января, 2016 - 19:46:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Prizma пишет:
Рекомендую использовать вместо
множественные sprintf могут привести к падению производительности. Т.е. нужно использовать аккуратно.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Prizma
Отправлено: 07 Января, 2016 - 21:10:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Viper пишет:
множественные sprintf могут привести к падению производительности. Т.е. нужно использовать аккуратно.

http://micro-optimization.com/string-concatenation-with-single-quotes-vs-sprintf/
в последних версиях php скорость всего лишь в 1.5 раза ниже обычной конкотенации, которая выполняется почти моментально.
В своих проектах вместо:
PHP:
скопировать код в буфер обмена
  1. $str = 'В вашей корзине ' . $x . ' товаров на сумму ' . $y . 'руб.';

Использую:
PHP:
скопировать код в буфер обмена
  1. $str = sprintf('В вашей корзине %s товаров на сумму %s руб.', $x, $y);

1. Нагляднее
2. Удобно править
3. Код становится более читаемым

Не значительный ущерб по производительности компенсируется сильными механизмами вывода, т.е. мне не нужно приводить значение, это делает сама функция, разработанная именно для этого.
(Добавление)
К слову в тестах не было php 5.5 и 5.6, я думаю там эта функция работает еще быстрее.
 
My status
 Top
Viper
Отправлено: 08 Января, 2016 - 01:07:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Prizma я говорю не про кол-во попугаев, а про реальную работу. Тем паче про конкатенацию речи не было.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Prizma
Отправлено: 08 Января, 2016 - 02:16:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Viper пишет:
Prizma я говорю не про кол-во попугаев, а про реальную работу. Тем паче про конкатенацию речи не было.

Окей, просто одного round() будет мало, чтобы вывести число с фиксированным кол-вом знаков после запятой, если конечно это требуется.
Просто интересно сколько sprintf нужно использовать чтобы снизить производительность? по моему и 1000 sprintf. что сложно представить наврятле нанесут хоть сколько-нибудь ощутимый урон производительности
 
My status
 Top
Viper
Отправлено: 08 Января, 2016 - 11:16:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Prizma на больших строках + с несколькими заменами в каждой и по нескольку на странице.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB