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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с разделителем запятая 
:(
    Опции темы
GrafF812
Дата 11.3.2010, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 3.12.2009

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



У меня есть два числа, 
Код

$a=12.2 // разделитель точка
$b=12,2 // разделитель запятая
с помощью INSERT INTO я записываю их в БД, однако значение переменной $b записисывается как 12 (т.е отбрасывается дробная часть), а с переменной $a все в порядке - записывается 12.2. Подскажите как решить проблему с переменной $b и почему так происходит. 

P.S: поле в БД, куда записывается переменная имеет тип FLOAT(12,6)

Это сообщение отредактировал(а) GrafF812 - 11.3.2010, 17:43
PM MAIL   Вверх
wOOx
Дата 11.3.2010, 19:06 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.12.2009

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



я делаю таг smile
Код

str_replace(',', '.', $b);

PM MAIL   Вверх
Ипатьев
Дата 11.3.2010, 19:37 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну, по поводу как решить проблему уже ответили, а по поводу почему так происходит - вас не удивляет, что ключ от квартиры не подходит к почтовому ящику? А колесо от камаза - к жигулям? 
Видимо, каждая вещь должна иметь определенный формат. И если база данных принимает в качестве разделителя точку, то все остальные символы - черточки, плюсики и запятые работать как разделитель не будут.

А тип поля должен быть DECIMAL, а не FLOAT
PM MAIL   Вверх
bars80080
Дата 11.3.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(Ипатьев @  11.3.2010,  18:37 Найти цитируемый пост)
А тип поля должен быть DECIMAL, а не FLOAT 

почему?
PM MAIL WWW   Вверх
skyboy
Дата 11.3.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

Репутация: 75
Всего: 260



потому что decimial хранит целую и дробную часть отдельно. следовательно, десятичные дроби(к прмиеру, 0.2) будут сохранены и обработаны с максимальной точностью. а в поле типа float то же значение 0.2 станет бесконечной дробью по основанию 2. и действия над этим значением будут приводить к приблизительному результату.
PM MAIL   Вверх
bars80080
Дата 11.3.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



ммм, переходим на decimal
PM MAIL WWW   Вверх
NLspieler
Дата 11.3.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(Ипатьев @  11.3.2010,  19:37 Найти цитируемый пост)
А тип поля должен быть DECIMAL, а не FLOAT

А почему тогда, если DECIMAL такой хороший, существует FLOAT? 
PM MAIL   Вверх
wOOx
Дата 11.3.2010, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.12.2009

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



наверно потому что decimal может хранить не более 38 разрядов
PM MAIL   Вверх
skyboy
Дата 11.3.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

Репутация: 75
Всего: 260



потому что decimial не хранит мантиссу. потому 9.4е-39 или 1.7е+120 не сохранить
PM MAIL   Вверх
GrafF812
Дата 12.3.2010, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 3.12.2009

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



wOOx, спасибо за решение, однако так:
Код

str_replace(',', '.', $b);
echo $b;

все равно выводит 12, а
Код

$b=str_replace(',', '.', $b);
echo $b;

выводит 12.2
Второй вариант работает, однако он избыточен, подскажите почему первый вариант не работает. Спасибо.

PM MAIL   Вверх
Ипатьев
Дата 12.3.2010, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



В  каком смысле "избыточен"?

PM MAIL   Вверх
capitan
Дата 13.3.2010, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как вариант, можно использовать ещё number_format
http://ru2.php.net/manual/en/function.number-format.php

Как говорится, на вкус и цвет ....
PM MAIL WWW ICQ   Вверх
GrafF812
Дата 13.3.2010, 00:43 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 3.12.2009

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



Цитата(Ипатьев @  12.3.2010,  23:45 Найти цитируемый пост)
В  каком смысле "избыточен"?

ну вот например в этом варианте:
Код

$b=str_replace(',', '.', $b);
echo $b;

переменную $b нужно указывать и в аргументе функции str_replace и для приема значения возвращаемой функции.
PM MAIL   Вверх
MoLeX
Дата 13.3.2010, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



GrafF812, почитай об этой функции

Добавлено через 26 секунд
она возвращает значение

Добавлено через 35 секунд
а не переписывает


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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