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]   

> Без описания
Alexey_php
Отправлено: 10 Июля, 2017 - 13:23:16
Post Id


Новичок


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


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




Здравствуйте.
Как можно грамотно реализовать разделитель тысячных с обрезкой нулей
Если я использую функцию number_format

PHP:
скопировать код в буфер обмена
  1. $int = 12345.500;
  2.  
  3. echo number_format($int,3,',',' ');//Выводит 12 345,500


А как теперь срезать нули чтобы из числа 12345.500 получилось 12 345,5
То есть разделил на тысячи и срезал лишние нули после запятой

(Отредактировано автором: 11 Июля, 2017 - 12:00:04)

 
 Top
Строитель Модератор
Отправлено: 10 Июля, 2017 - 15:58:53
Post Id



Участник


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


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




Alexey_php
Спойлер (Отобразить)
 
 Top
Alexey_php
Отправлено: 11 Июля, 2017 - 12:17:55
Post Id


Новичок


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


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




Я не до конца выразил мысль.
Имелось в виду что в цикле while есть Значения переменных из которых нужно
получить Результат обработки

Значения переменных
$int_1 = 12345;
$int_2 = 12345.500;
$int_3 = 12345.560;
$int_4 = 12345.567;

Результат обработки
$int_1 = 12 345;
$int_2 = 12 345,5;
$int_3 = 12 345,56;
$int_4 = 12 345,567;

(Отредактировано автором: 11 Июля, 2017 - 12:33:38)

 
 Top
teleoperator27
Отправлено: 11 Июля, 2017 - 12:24:39
Post Id



Посетитель


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


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




Alexey_php пишет:
Я не до конца выразил мысль имелось в виду
Так выразите до конца. Покажите код, покажите, что там за цикл и что должно получиться.
 
My status
 Top
Мелкий Супермодератор
Отправлено: 11 Июля, 2017 - 12:29:28
Post Id



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


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


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




rtrim($num, ',0'), если по-простому.
number_format как раз нули намеренно выводит.


-----
PostgreSQL DBA
 
 Top
Alexey_php
Отправлено: 11 Июля, 2017 - 13:05:33
Post Id


Новичок


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


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




teleoperator27 хорошо я вас понял

1: Данные хоронятся в mysql в поле num c типом json (данные есть как целые так и дробные)

CODE (SQL):
скопировать код в буфер обмена
  1. ["12345","12345.000","12345.500","12345.560","12345.567","12345.050"]


2: Цикл while все эти данные выводит

PHP:
скопировать код в буфер обмена
  1. $res = $db->query('SELECT num FROM table');
  2.  
  3. while($row = $res->fetch(PDO::FETCH_ASSOC))
  4. {
  5.    echo $row['num'];
  6. }


Как получить формат данных представленный ниже

12 345
12 345
12 345.5
12 345.56
12 345.567
12 345.05

Я могу использовать типизацию переменной типа echo (float)$row['num'];
В итоге я получу

12345
12345
12345.5
12345.56
12345.567
12345.05

А как теперь разбить на тысячные чтобы не было нулей

(Отредактировано автором: 11 Июля, 2017 - 13:08:08)

 
 Top
teleoperator27
Отправлено: 11 Июля, 2017 - 14:01:40
Post Id



Посетитель


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


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




вам же Строитель написал уже

PHP:
скопировать код в буфер обмена
  1. $int = 12345.500;
  2.  
  3. echo number_format($int,3,',',' ');//Выводит 12 345,500

Сложно разве подставить в нужное место
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = $db->query('SELECT num FROM table');
  3.  
  4. while($row = $res->fetch(PDO::FETCH_ASSOC))
  5. {
  6. echo number_format($row['num'], 1, ',', ' ');
  7. }
 
My status
 Top
Alexey_php
Отправлено: 11 Июля, 2017 - 14:25:26
Post Id


Новичок


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


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




teleoperator27

И в итоге из данных ["12345","12345.000","12345.500","12345.560","12345.567","12345.050"]

используя функцию number_format($row['num'], 1, ',', ' ');

я получу вот такой вывод

12 345,0
12 345,0
12 345,5
12 345,6
12 345,6
12 345,1

а как получить вот такой вид

12 345
12 345
12 345,5
12 345,56
12 345,567
12 345,05

(Отредактировано автором: 11 Июля, 2017 - 14:27:31)

 
 Top
Строитель Модератор
Отправлено: 11 Июля, 2017 - 14:26:44
Post Id



Участник


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


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




teleoperator27 пишет:
вам же Строитель написал уже
Там этого оказалось не достаточно. Я предполагаю, что для решения наверное придется использовать регулярные выражения.
(Добавление)
Alexey_php, выше Мелкий вам дал верный совет
Спойлер (Отобразить)
 
 Top
Alexey_php
Отправлено: 11 Июля, 2017 - 15:06:28
Post Id


Новичок


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


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




Строитель

Да вы правы Мелкий задал правильное направление.
Функция в функции помогла добиться желаемого вывода данных



Спасибо
 
 Top
Строитель Модератор
Отправлено: 11 Июля, 2017 - 15:06:30
Post Id



Участник


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


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




Подправил код с учётом этого результата
Спойлер (Отобразить)

(Добавление)
Alexey_php rtrim удаляет символы в конце строки Подмигивание
 
 Top
Мелкий Супермодератор
Отправлено: 11 Июля, 2017 - 15:57:47
Post Id



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


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


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




Внимание с тримом по ,0. Я не сразу сообразил, но так можно покоцать данные: например, входное значение 5430,00 даст немного не тот результат.
Консистентно отпилить нули с запятой будет


-----
PostgreSQL DBA
 
 Top
Строитель Модератор
Отправлено: 11 Июля, 2017 - 18:30:58
Post Id



Участник


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


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




Alexey_php, вариант на регулярках(цикл "foreach" для демонстрации)
Спойлер (Отобразить)
 
 Top
Alexey_php
Отправлено: 12 Июля, 2017 - 11:19:32
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1. $int = 12345.050;
  2. echo rtrim(number_format($int,3,',',' '),',0');


Функция в функции это тот минимум который оптимально справляется с обрезкой нулей

я думаю rtrim и number_format будут работать быстрее чем регулярные выражение в цикле

Спасибо за примеры

(Отредактировано автором: 12 Июля, 2017 - 11:20:04)

 
 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