Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 09.11.2017, 17:50   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,300
По умолчанию Преобразовтаь строку в число (int/float неважно)

Здравствуйте.
Есть такая задача: нужно входную строку (цену) преобразовать в число, с необходимостью получить ошибку выполнения с последующим её перехватом в try-catch.
Прямое приведение $number=(float)$str; работает с осечками на любой неправедный символ, гугл выдал мне функцию floatval, которая почему то отрезает мне нули (дал ей '1000', получил 1). Всё потому что функция пытается что то исправлять, а это не есть хорошо. В случае ошибки пользователя, и программа должна выдавать/обрабатывать ошибку, а не пытаться вносить свои лепты.
Как быть ?
P. S. Пока я пошёл конструировать очередной велосипед, видите ли, то что уже есть - работает не так как нужно в самых простых случаях, не говоря уже о чём то более серьёзном.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 09.11.2017, 18:08   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,263
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
гугл выдал мне функцию floatval, которая почему то отрезает мне нули (дал ей '1000', получил 1)
странно. у меня ничего не отрезает:
Код:
<?php
 $s = '1000';
 $d = floatval($s);
 echo var_dump($d);
?>
результат:
Цитата:
Код:
float(1000)

но в целом у меня нет достаточного опыта, чтобы ответить Вам на ваш вопрос.
я могу нагуглить варианты кода, но, по всей видимости, Вы это уже сделали сами.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.11.2017, 18:14   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,300
По умолчанию

Serge_Bliznykov, нули отрезает, ибо там пробел после единицы. В общем и целом - это не правильно; пускай он бы мне выдал ошибку, нежели пропускает, а я не в состоянии это проконтролировать. Как результат - ошибку я вижу постфактум, когда например заказчик бъёт тревогу, что здесь должно быть 1500, а здесь 1.
str_replace почему то пробел не съедает.
UPD: не съедает, потому что это и не пробел вовсе. Цирк какой то. Скопировал и вставил в код, теперь работает правильно.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 09.11.2017 в 18:22.
OmegaBerkut вне форума Ответить с цитированием
Старый 11.11.2017, 14:41   #4
Byurrer
Пользователь
 
Регистрация: 15.01.2011
Сообщений: 77
По умолчанию

Еще можно так:
Код:
sscanf("1500", "%d", $num);
Byurrer вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не выводится дробное число.float, ошибка,int main felker Общие вопросы C/C++ 2 04.02.2015 13:26
Двухзначное число int записать как пару однозначных int (c++) narien Помощь студентам 2 08.01.2012 15:10
функция float average(int arrray[],int from,int to) yuliyayuliya Помощь студентам 0 25.04.2011 21:55
float to int Артэс Общие вопросы C/C++ 1 14.12.2009 02:20
float to int span4 SQL, базы данных 7 01.06.2009 10:57