php preg_match_all - результат (числовой) STRING to DECIMAL - тип - PullRequest
2 голосов
/ 04 сентября 2011

У меня есть скрипт, который идентифицирует с preg_match_all некоторыми числами из данного файла и в заданном формате '#(\d\,\d\d\d\d)#' (десятичный, с 4 десятичными). С ними позже мне нужно будет выполнить некоторые математические операции, чтобы узнать сумму, среднее значение и т. Д.

С помощью print_r я могу видеть все совпадения из массива, и это нормально (4,3456, 4,9098 и т. Д.). Я проверяю тип переменных и gettype() возвращает строку

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

Например:

4,3456 + 4,9098 + 4,3456 = 12 или 12,0000 - если я использую number_format.

Я использовал . вместо , в числах, я отформатировал результаты с number_format, но безуспешно. Кажется, я что-то упустил.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 04 сентября 2011

Ошибка возникает даже до вызова number_format - PHP считает . десятичным разделителем, а не ,. вам нужно str_replace всех ваших элементов массива:

$values_array = str_replace(",", ".", $values_array)
0 голосов
/ 04 сентября 2011

PHP использует символ . в качестве десятичного разделителя, поэтому вам нужно заменить , на . в ваших совпадающих числах перед преобразованием их в числа:

$number = floatval(strtr("1,234", ",", "."));
// 1.234

Пример:

<?php

$numbers = array("1,234", "5,67");
$numbers = str_replace(",", ".", $numbers);
echo number_format($numbers[0] + $numbers[1], 4, ',', ' ');

Попробуйте здесь: http://codepad.org/LeeTiKPF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...