Отображение формата Coma с Php Mysql и SUM it [dубликат]

В таблице может быть только один первичный ключ. Факт, в котором может состоять более чем из одного поля, не увеличивает количество первичных ключей, есть еще один.

Поскольку часть пары PK не уникальна, вам, очевидно, нужно создать внешний ключ, который ссылается к двум полям: ССЫЛКИ t1 (f1, f2).

43
задан Aine 1 December 2010 в 15:29
поделиться

7 ответов

Использование str_replace () для удаления точек не является избыточным.

  $ string_number = '1.512.523,55';  // ПРИМЕЧАНИЕ. Вы действительно не должны использовать floatval () здесь, это просто, чтобы доказать, что это законное значение float.  $ number = floatval (str_replace (',', '.', str_replace ('.', '', $ string_number)));  // В этот момент $ number является «естественным» поплавком.  print $ number;   

Это почти наверняка наименее насыщенный CPU способ, которым вы можете это сделать, и вероятность того, что даже если вы используете какую-нибудь причудливую функцию для этого, что это то, что он делает под капотом .

81
ответ дан Teekin 16 August 2018 в 04:21
поделиться

Может показаться чрезмерным, но будет преобразовывать любой заданный формат без mater locale:

  function normalizeDecimal ($ val, int $ precision = 4): string {$ input = str_replace ('',  '', $ val);  $ number = str_replace (',', '.', $ input);  if (strpos ($ number, '.')) {$ groups = explode ('.', str_replace (',', '.', $ number));  $ lastGroup = array_pop ($ groups);  $ number = implode ('', $ groups).  ''  ,  $ LastGroup;  } return bcadd ($ number, 0, $ precision);  }  

Выход:

  .12 - & gt;  0.1200 123 - & gt;  123,0000 123,91 - & gt;  12345678,9100 123 456 78,91 - & gt;  12345678,9100 123,456,78.91 - & gt;  12345678.9100 123.456.78,91 - & gt;  12345678,9100 123 456 78,91 - & gt;  12345678.9100  
2
ответ дан Adrian Piechota 16 August 2018 в 04:21
поделиться

Если вы используете PHP5.3 или выше, вы можете использовать numfmt_parse , чтобы выполнить «обратный номер_формат». Если вы этого не сделали, вы застряли с заменой записей с помощью preg_replace / str_replace.

14
ответ дан Björn 16 August 2018 в 04:21
поделиться
  • 1
    Вам также потребуется PECL intl & gt; = 1.0.0 – riotera 13 October 2012 в 21:48
  • 2
    «Вам также нужен PECL intl & gt; = 1.0.0" Нет, он говорит, что вам нужно иметь PHP 5.3 & gt; или вам нужно установить его через пакет PECL intl 1.0.0. PHP 5.3+ имеет встроенную поддержку. – Michael Ryan Soileau 4 September 2015 в 18:51
  • 3
    Вам действительно нужно будет проверить, включено ли расширение intl . Он не встроен, он должен быть явно скомпилирован или установлен как отдельный расширение. Не все хостинг-провайдеры устанавливают его с помощью PHP. – cronfy 12 April 2016 в 09:02

Вы можете использовать класс NumberFormatter с помощью метода parse .

10
ответ дан Gumbo 16 August 2018 в 04:21
поделиться
  • 1
    Доступно только в версии 5.3 или выше, так же как отказ от ответственности. ;-) – Björn 1 December 2010 в 15:40

Предполагая, что они находятся в файле или массиве, просто замените его как пакет (то есть на всех сразу):

  $ input = str_replace (array ('.', ','  ), array ('', '.'), $ input);   

, а затем обрабатывать числа оттуда, полностью используя непринужденную типизацию PHP.

4
ответ дан Paul Norman 16 August 2018 в 04:21
поделиться

Эта функция совместима для чисел с точками или запятыми как десятичные числа

  function floatvalue ($ val) {$ val = str_replace (",", ".", $ val);  $ val = preg_replace ('/\.(?=.*\.)/', '', $ val);  return floatval ($ val);  } $ number = "1.325.125,54";  echo floatvalue ($ number);  // Выход 1325125.54 $ number = "1,325,125.54";  echo floatvalue ($ number);  // Выход 1325125.54  
4
ответ дан Ramon 16 August 2018 в 04:21
поделиться
  • 1
    Благодарю. работал для меня как шарм! – eugene.polschikov 6 April 2018 в 12:28

из руководства PHP:

str_replace - заменить все вхождения строки поиска на заменяющую строку

. Я бы спустил этот маршрут, а затем конвертировать из строки в float - floatval

1
ответ дан Veger 16 August 2018 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: