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
Форумы портала PHP.SU :: Версия для печати :: Разделитель тысячных с обрезкой нулей
Форумы портала PHP.SU » » Вопросы новичков » Разделитель тысячных с обрезкой нулей

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

1. Alexey_php - 10 Июля, 2017 - 13:23:16 - перейти к сообщению
Здравствуйте.
Как можно грамотно реализовать разделитель тысячных с обрезкой нулей
Если я использую функцию number_format

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


А как теперь срезать нули чтобы из числа 12345.500 получилось 12 345,5
То есть разделил на тысячи и срезал лишние нули после запятой
2. Строитель - 10 Июля, 2017 - 15:58:53 - перейти к сообщению
Alexey_php
Спойлер (Отобразить)
3. Alexey_php - 11 Июля, 2017 - 12:17:55 - перейти к сообщению
Я не до конца выразил мысль.
Имелось в виду что в цикле 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;
4. teleoperator27 - 11 Июля, 2017 - 12:24:39 - перейти к сообщению
Alexey_php пишет:
Я не до конца выразил мысль имелось в виду
Так выразите до конца. Покажите код, покажите, что там за цикл и что должно получиться.
5. Мелкий - 11 Июля, 2017 - 12:29:28 - перейти к сообщению
rtrim($num, ',0'), если по-простому.
number_format как раз нули намеренно выводит.
6. Alexey_php - 11 Июля, 2017 - 13:05:33 - перейти к сообщению
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

А как теперь разбить на тысячные чтобы не было нулей
7. teleoperator27 - 11 Июля, 2017 - 14:01:40 - перейти к сообщению
вам же Строитель написал уже

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. }
8. Alexey_php - 11 Июля, 2017 - 14:25:26 - перейти к сообщению
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
9. Строитель - 11 Июля, 2017 - 14:26:44 - перейти к сообщению
teleoperator27 пишет:
вам же Строитель написал уже
Там этого оказалось не достаточно. Я предполагаю, что для решения наверное придется использовать регулярные выражения.
(Добавление)
Alexey_php, выше Мелкий вам дал верный совет
Спойлер (Отобразить)
10. Alexey_php - 11 Июля, 2017 - 15:06:28 - перейти к сообщению
Строитель

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



Спасибо
11. Строитель - 11 Июля, 2017 - 15:06:30 - перейти к сообщению
Подправил код с учётом этого результата
Спойлер (Отобразить)

(Добавление)
Alexey_php rtrim удаляет символы в конце строки Подмигивание
12. Мелкий - 11 Июля, 2017 - 15:57:47 - перейти к сообщению
Внимание с тримом по ,0. Я не сразу сообразил, но так можно покоцать данные: например, входное значение 5430,00 даст немного не тот результат.
Консистентно отпилить нули с запятой будет
13. Строитель - 11 Июля, 2017 - 18:30:58 - перейти к сообщению
Alexey_php, вариант на регулярках(цикл "foreach" для демонстрации)
Спойлер (Отобразить)
14. Alexey_php - 12 Июля, 2017 - 11:19:32 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $int = 12345.050;
  2. echo rtrim(number_format($int,3,',',' '),',0');


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

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

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

 

Powered by ExBB FM 1.0 RC1