EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

[php]правильное преобразование string>int/float
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
[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    Заголовок сообщения: Ответить с цитатой

Ручное когда ручками перебираете каждый символ и реагируете на неверный данные, алгоритм что вроде (писал в блокноте на память так что код скорее всего работать не будет, это только как пример алгоритма Laughing ):

Код:
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 Smile не говоря о всяких записях вида 2.3334 е-12
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Alek$
11 1110 1000
11 1110 1000


Зарегистрирован: 24.11.2007
Сообщения: 1136
Откуда: Новосибирск
26695 Монеты

СообщениеДобавлено: Сб, 27 Дек, 2008 14:39    Заголовок сообщения: Ответить с цитатой

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


Зарегистрирован: 22.01.2008
Сообщения: 1159
Откуда: Lietuva
7191 Монеты

СообщениеДобавлено: Сб, 27 Дек, 2008 14:43    Заголовок сообщения: Ответить с цитатой

lazutov
Если о преобразовании данных то преоброзавать данные из типа string в int невозможно (Ну если данные будут только числовыми то возможно)
_________________
Скрипты [PHP/JS] на заказ, в ЛС, недорого.

SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Сб, 27 Дек, 2008 15:59    Заголовок сообщения: Ответить с цитатой

Помоему все предельно ясно есть строка в которой записано целое или вещественное число и нужно перевести эту строку в числовой формат.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Alek$
11 1110 1000
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 Монеты

СообщениеДобавлено: Сб, 27 Дек, 2008 16:13    Заголовок сообщения: Ответить с цитатой

Веденин
именно
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 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 рубля Laughing
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Сб, 27 Дек, 2008 19:10    Заголовок сообщения: Ответить с цитатой

нет.
У меня изначально валидный стринг вида xx.xx/xx,xx
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SWAT
Пол-пирога
Пол-пирога


Зарегистрирован: 29.07.2007
Сообщения: 61
Откуда: Россия
4695 Монеты

СообщениеДобавлено: Вс, 11 Янв, 2009 17:37    Заголовок сообщения: Ответить с цитатой

Что то не уловил смысл Smile))
Чем плохи функции intval() strval() doubleval()?
_________________
C/C++, Lua, JavaScript, CSS + XHTML, PHP.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вс, 11 Янв, 2009 17:38    Заголовок сообщения: Ответить с цитатой

могут глючить
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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% превышение верхней границы числового типа.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET