|
[php]правильное преобразование string>int/float
|
| Автор |
Сообщение |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
Добавлено: Сб, 27 Дек, 2008 07:27 Заголовок сообщения: [php]правильное преобразование string>int/float |
|
|
какое преобразование будет безотказнее?
Ваше мнение? _________________ сервис DNS | разные http, DNS и прочие утилиты |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Сб, 27 Дек, 2008 12:35 Заголовок сообщения: |
|
|
Ручное когда ручками перебираете каждый символ и реагируете на неверный данные, алгоритм что вроде (писал в блокноте на память так что код скорее всего работать не будет, это только как пример алгоритма ):
| Код: | function StrToFloat($str);
$str = trim($str);
$i=0;$k=1;
for($j=0;$j<=strlen($str);$j++){
if($str[$j]>='0' && $str[$j]<='9') {
$i = $i + $str[$j]*$k;
if($k>1) $k=$k*10;
else $k = $k*0.1;
} else if($str[$j]=='.' && $str[$j]==',') $k = 0.1;
} else if($str[$j]<=' ') {}
else {
echo 'БЛ*ЯЯЯЯ ОШИБКАААА! ПОООМОГИТЕЕЕ!';
}
}
return $i;
} |
З.И. Ещё надо учитывать какие посетители будут у вас на сайте, так как в Америке число 279856,67 могут записать так 279,856.67 ,а где-нибудь во Франции (страну назвал от балды) так 279'856,67 или так 279'856.67 не говоря о всяких записях вида 2.3334 е-12 _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
Alek$ 11 1110 1000


Зарегистрирован: 24.11.2007 Сообщения: 1136 Откуда: Новосибирск 26695 
|
Добавлено: Сб, 27 Дек, 2008 14:39 Заголовок сообщения: |
|
|
lazutov
не совсем понял о чем речь. О преобразовании типов? Или о контрольной сумме? И какой вид входных данных?
Для преобразования типов можно использовать функцию settype(). _________________ Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог |
|
| Вернуться к началу |
|
 |
Артур 11 1110 1000


Зарегистрирован: 22.01.2008 Сообщения: 1159 Откуда: Lietuva 7191 
|
Добавлено: Сб, 27 Дек, 2008 14:43 Заголовок сообщения: |
|
|
lazutov
Если о преобразовании данных то преоброзавать данные из типа string в int невозможно (Ну если данные будут только числовыми то возможно) _________________ Скрипты [PHP/JS] на заказ, в ЛС, недорого.
SAPE |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Сб, 27 Дек, 2008 15:59 Заголовок сообщения: |
|
|
Помоему все предельно ясно есть строка в которой записано целое или вещественное число и нужно перевести эту строку в числовой формат. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
Alek$ 11 1110 1000


Зарегистрирован: 24.11.2007 Сообщения: 1136 Откуда: Новосибирск 26695 
|
Добавлено: Сб, 27 Дек, 2008 16:10 Заголовок сообщения: |
|
|
Веденин
тогда в чем проблема? PHP - язык с динамической типизацией, все переменные приводятся к нужному типу автоматически. Либо, если нужно сделать это вручную, то settype().
Зачем громоздкие и медленные функции? _________________ Самая страшная ошибка - это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB3 [Russian]
Антисоциальный блог |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Сб, 27 Дек, 2008 19:00 Заголовок сообщения: |
|
|
| Alek$ писал(а): | Веденин
тогда в чем проблема? PHP - язык с динамической типизацией, все переменные приводятся к нужному типу автоматически. Либо, если нужно сделать это вручную, то settype().
Зачем громоздкие и медленные функции? |
Давайте проверим:
| Код: | <?php
$t1 = ' 1231 13.22';
$t2 = '33.23';
$t3 = '33,33';
$t4 = "333`33.33";
$t5 = '333.33xcsdcvs';
echo $t1 + 1; echo '<br>';
echo $t2 + 1; echo '<br>';
echo $t3 + 1; echo '<br>';
echo $t4 + 1; echo '<br>';
echo $t5 + 1; echo '<br>';
?> |
Результат:
| Код: | 1232
34.23
34
334
334.33 |
Т.е. например нельзя использовать пробелы в строке цифр, нельзя испоьзовать запятую, и преобразование числа без сообщений об ошибки, например на банковском сайте имхо недопустимо, вряд ли стоит полагать, что пользователь имел в виду, когда вводил что на его счет надо перечислить 344у555,то что на счет должно придти 344 рубля  _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
SWAT Пол-пирога

Зарегистрирован: 29.07.2007 Сообщения: 61 Откуда: Россия 4695 
|
Добавлено: Вс, 11 Янв, 2009 17:37 Заголовок сообщения: |
|
|
Что то не уловил смысл ))
Чем плохи функции intval() strval() doubleval()? _________________ C/C++, Lua, JavaScript, CSS + XHTML, PHP. |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
|
| Вернуться к началу |
|
 |
SWAT Пол-пирога

Зарегистрирован: 29.07.2007 Сообщения: 61 Откуда: Россия 4695 
|
Добавлено: Вс, 11 Янв, 2009 17:39 Заголовок сообщения: |
|
|
А можно просто перед переменной подставить в скобочках тип и она преобразуется.
| Код: | | print_r( (int)$var = '123' ); |
_________________ C/C++, Lua, JavaScript, CSS + XHTML, PHP. |
|
| Вернуться к началу |
|
 |
SWAT Пол-пирога

Зарегистрирован: 29.07.2007 Сообщения: 61 Откуда: Россия 4695 
|
Добавлено: Вс, 11 Янв, 2009 17:41 Заголовок сообщения: |
|
|
| lazutov писал(а): | | могут глючить |
Хмм... Не замечал глюков никогда. _________________ C/C++, Lua, JavaScript, CSS + XHTML, PHP. |
|
| Вернуться к началу |
|
 |
lazutov while (1==1);


Зарегистрирован: 30.04.2007 Сообщения: 3840
111220 
|
Добавлено: Вс, 11 Янв, 2009 17:45 Заголовок сообщения: |
|
|
Они бывают.
При хз каких условиях было 10.111 преобразовано в отрицательное, да еше больше в 100-200 раз _________________ сервис DNS | разные http, DNS и прочие утилиты |
|
| Вернуться к началу |
|
 |
Веденин Красные глаза


Зарегистрирован: 17.05.2007 Сообщения: 2066 Откуда: Самара 11733 
|
Добавлено: Вс, 11 Янв, 2009 19:07 Заголовок сообщения: |
|
|
Может intval ожидал получить запятую (стояло в настройках русская настройка) и число 10.111 превратилось в 10111, а так как оно не влезло в диапазон то стало отрицательным?
Вообще, если вы получили вдруг отрицательное число это 99% превышение верхней границы числового типа. _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг |
|
| Вернуться к началу |
|
 |
|