| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > переопределение floatval() |
| Автор: bars80080 14.10.2011, 16:32 |
| на одном сайте каким-то образом переопределена floatval, так, что она конвертирует число с точкой в число с запятой. каким образом это происходит? чтобы я мог найти сие место и вернуть в нужное состояние |
| Автор: CruorVult 14.10.2011, 16:43 |
| http://php.net/manual/en/function.override-function.php ? Добавлено через 4 минуты и 38 секунд или http://de3.php.net/manual/en/function.runkit-function-redefine.php |
| Автор: bars80080 14.10.2011, 16:59 |
| у меня чего-то эти функции чего-то не определяются Fatal error: Call to undefined function вообще, как я понимаю, floatval могли перекрутить с помощью setlocal() но я не могу найти в коде эту функцию, а главное, в нужном месте просто не могу сделать повторного setlocal() на нужный мне делиметер |
| Автор: CruorVult 14.10.2011, 17:27 |
| может как-то через апач переопределяеться с помощью подключаемого модуля хотя не думаю что кто-то на столько изощрен |
| Автор: baldina 14.10.2011, 17:46 | ||
| может речь о том, что floatval воспринимает запятую во входной строке как разделитель? но это странно, насколько я понимаю, floatval не учитывает localeconv[decimal_point] при преобразовании из строки и всегда ожидает точку. bars80080, попробуйте
имхо должно быть 123456.789 123456.789 123456 123456,789 123456,789 123456 |
| Автор: bars80080 14.10.2011, 17:51 | ||||
floatval там вызывается везде, поэтому есть сложность с заменой на свою функцию я провёл тест, загнал такой код
если же вместо floatval просто помножить на единицу, то результат тот же
и этих floatval там по коду - до чёрта. но данные надо вставить в БД, поэтому необходимо их перевести в корректный вид Добавлено через 6 минут и 55 секунд уф! помогло засунул setlocale(LC_NUMERIC, 'en_US') посередь кода - сработало раньше пытался setlocale(LC_NUMERIC, 'en_EN') - не работало спасибо |
| Автор: baldina 14.10.2011, 18:01 |
| дело не в floatval, её никто не переопределял, и Вам переопределять не нужно попробуйте сделать setlocale. её результат зависит от текущих настроек системы (напр, под windows разделитель для текущей локали меняется из панели управления, под linux определения локалей лежат обычно в /usr/share/locale и т.д.) параметры текущей локали можно проверить при помощи localeconv() мест, где производится вставка данных вероятно намного меньше, чем вызовов floatval. в крайнем случае замените разделитель. Добавлено через 1 минуту и 32 секунды просто нет такой локали)))) |