Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переопределение floatval() 
V
    Опции темы
bars80080
Дата 14.10.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



на одном сайте каким-то образом переопределена floatval, так, что она конвертирует число с точкой в число с запятой.

каким образом это происходит? чтобы я мог найти сие место и вернуть в нужное состояние
PM MAIL WWW   Вверх
CruorVult
Дата 14.10.2011, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



PM MAIL Skype   Вверх
bars80080
Дата 14.10.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



у меня чего-то эти функции чего-то не определяются
Fatal error: Call to undefined function 


вообще, как я понимаю, floatval могли перекрутить с помощью setlocal()
но я не могу найти в коде эту функцию, а главное, в нужном месте просто не могу сделать повторного setlocal() на нужный мне делиметер
PM MAIL WWW   Вверх
baldina
Дата 14.10.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(bars80080 @  14.10.2011,  16:32 Найти цитируемый пост)
на одном сайте каким-то образом переопределена floatval, так, что она конвертирует число с точкой в число с запятой.

это точно? оригинальная floatval() возвращает float, у которого нет понятия символа разделителя. разделитель появляется при конвертации в строку

Добавлено через 38 секунд
bars80080, покажите фрагмент кода, где вызывается floatval
PM MAIL   Вверх
CruorVult
Дата 14.10.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



может как-то через апач переопределяеться с помощью подключаемого модуля

хотя не думаю что кто-то на столько изощрен smile но мало ли, стоит проверить
PM MAIL Skype   Вверх
baldina
Дата 14.10.2011, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



может речь о том, что floatval воспринимает запятую во входной строке как разделитель? но это странно, насколько я понимаю, floatval не учитывает localeconv[decimal_point] при преобразовании из строки и всегда ожидает точку.
bars80080, попробуйте 
Код

setlocale(LC_NUMERIC, 'en_US');
echo 123456.789 . ' ' . floatval('123456.789') . ' ' . floatval('123456,789')."\n";
setlocale(LC_NUMERIC, 'ru_RU');
echo 123456.789 . ' ' . floatval('123456.789') . ' ' . floatval('123456,789');

имхо должно быть 
123456.789 123456.789 123456
123456,789 123456,789 123456
PM MAIL   Вверх
bars80080
Дата 14.10.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(baldina @  14.10.2011,  17:23 Найти цитируемый пост)
покажите фрагмент кода, где вызывается floatval 

floatval там вызывается везде, поэтому есть сложность с заменой на свою функцию

я провёл тест, загнал такой код


Код

$total = $cart->getOrderTotal(true, 3); // какой-то свой метод
var_dump($total); // float(275,48)
$total = str_replace(',', '.', $total);
var_dump($total); // string("275.48")

$total = floatval($total);
var_dump($total); // float(275,48)


если же вместо floatval просто помножить на единицу, то результат тот же

Код

var_dump($total); // string("275.48")
$total *= 1;
var_dump($total); // float(275,48)


и этих floatval там по коду - до чёрта. но данные надо вставить в БД, поэтому необходимо их перевести в корректный вид

Добавлено через 6 минут и 55 секунд
уф! помогло

засунул
setlocale(LC_NUMERIC, 'en_US')
посередь кода - сработало

раньше пытался 
setlocale(LC_NUMERIC, 'en_EN') - не работало



спасибо
PM MAIL WWW   Вверх
baldina
Дата 14.10.2011, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



дело не в floatval, её никто не переопределял, и Вам переопределять не нужно
попробуйте сделать setlocale. её результат зависит от текущих настроек системы (напр, под windows разделитель для текущей локали меняется из панели управления, под linux определения локалей лежат обычно в /usr/share/locale и т.д.)
параметры текущей локали можно проверить при помощи localeconv()

Цитата(bars80080 @  14.10.2011,  17:51 Найти цитируемый пост)
данные надо вставить в БД

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

Добавлено через 1 минуту и 32 секунды
Цитата(bars80080 @  14.10.2011,  17:51 Найти цитируемый пост)
en_EN

просто нет такой локали))))

Это сообщение отредактировал(а) baldina - 14.10.2011, 18:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0872 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.