Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > PHP 5.2.3 не хочет определять тип данных


Автор: Explicito 25.7.2007, 09:44
Всем привет!
Вот такая ужасно-банальная проблема, сам с ней сталкиваюсь впервые, локально всё протестировал, работало исключительно, выложил программу на сервер, и тут повылазили баги, искал ошибку, искал.., и нашёл, оказалось что у хостмастера php v5.2.3 не хочет автоматически определять тип данных, имеются у меня в программе  переменные  типа string, но хранят значения вещественного типа:
  
Код

$max = '6000000.00';
$min = '300000.00';
$result = $max - $min; // возвращает - 300000.00 , типа string, при обычных настройках php, как у всех считает правильно, а тут...

// уже пробовал и так: 
settype($max, 'double');
// потом проверяю 
gettype($max); // всё верно, тип уже double, но значение = 0



Может быть кто-то сталкивался с такой проблемой, помогите пожалуйста

Автор: belousov 25.7.2007, 09:54
А кавычки для цифр зачем? правда это не особо спасет, но все таки

Автор: Explicito 25.7.2007, 10:22
ситуация такая, есть файл данных, формата .csv, поле которого хринит значения формата 10 350 543,50 каждое значение я парсю, так:
Код

$value = '10 350 543,50'; // значение вытянутое из файла
$value = str_replace(' ', '', $value);
$value = str_replace(',', '.', $value);
// теперь $value = '10350543.50';
// далее хочу выполнить операцию разности над этим значением, но никак не хочет...
// не хочет "понимать" строку как вещественный тип данных..
 

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

Автор: Daevaorn 25.7.2007, 10:29
http://ru2.php.net/manual/en/function.intval.php

Автор: Shaggie 25.7.2007, 10:37
Код

$value = '10 350 543,50';
$value = str_replace(' ', '', $value);
$value = str_replace(',', '.', $value);
$value = floatval($value);
// $value = 10350543.50

Автор: GZep 25.7.2007, 11:38
Код

echo floatval(str_replace(array(' ' => '', ',' => '.'), '99 9850 543,50'));

Автор: Explicito 25.7.2007, 12:09
Рабята, спсибо Вам огромное!
получилось, прям заколдованное место, сначала попробовал так:
Код

$value = str_replace(' ', '.', $value);
$value = str_replace(',', '.', $value);
// из всего списка значения нормально позаменяло.. 60 354 543,56 => 60354543.56
// а последнее 63 354 543,56 => 63 354 543.56  что за дела, сделал так:

$value = preg_replace('#\s+#is', '', $value);
$value = str_replace(',', '.', $value);
// без проблем..., слава Богу..

// помогла ф-ция
$value = floatval($value); 
 

Автор: Mal Hack 25.7.2007, 15:36
Не хочу описывать весь тот бред, который вы тут понаписали, простите уж за прямоту, поэтому скажу как надо...
В PHP все данные, полученные от пользователя, из фалйа или откуда-ть еще считаются строковыми.
За исключением  записи: $a = 3333 - без ковычек. в Ковычках это - СТРОКА, а т.к. если в одинарных, то надо еще понять что в ней будет..
Едем далее. В вашем, Explicito, примере достаточно сделать $value = (double) $value; После замены пробелов и запятой.
А вообще, надо данные хранить в адекватном виде, а не как Бог на лушу положит... В Этом ваша ошибка.
Вариант, GZep'a - тоже самое, практически, но более правильный, что в данном случае не орбязательно. Изврат с массивом я оставлю без комментариев, поскольку, повторюсь, пока АВТОР не организует адекватное хранение данных о дальнейшем и разговора быть не может.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)