Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Хранение чисел в БД и их дальнейшая обработка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dropoff
Отправлено: 13 Ноября, 2012 - 09:25:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Всем привет.

Такой вопрос назрел.
Есть поле для ввода определенного числа. Это число может быть любым: 1, 50, 100000, 0.5, 0.07, 500.30 и т.д... Т.е. и с плавающей точкой и целое.
Как лучше хранить в БД ?
Мне нужно для фильтрации.
В админке я задаю например от 5 до 55 или от 0.5 до 1.7
На сайте человек уже выбирает в слайдере ОТ и ДО

Как я понял, то тут могут проблемы возникнуть с плавающей точкой.
 
 Top
EuGen Администратор
Отправлено: 13 Ноября, 2012 - 09:27:25
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Зависит от задачи. Насколько я понял, в Вашем случае оптимальным будет тип DECIMAL - с фиксированным количеством знаков после запятой.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 13 Ноября, 2012 - 09:36:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если это денежная величина - неплохим решением является хранение целым числом, в копейках/центах/евроцентах/(какая у вас там валюта), а не рублях/долларах/евро/etc соответственно.
В плюсе - тупой int, в минусе - при обработке об этом надо помнить.


-----
PostgreSQL DBA
 
 Top
dropoff
Отправлено: 13 Ноября, 2012 - 09:41:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




нет, не денежная.
Проблема в том, что может быть и 1 и 0.6 и 0.06 и 500.6 т.е. совершенно любой вариант
Я читал про DECIMAL, но там заранее нужно указать сколько знаков. а знаком после запятой(точки) может быть сколько угодно
 
 Top
Zuldek
Отправлено: 13 Ноября, 2012 - 09:44:12
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




ну так и сделайте 10 знаков. а нули не выводите.
 
 Top
dropoff
Отправлено: 13 Ноября, 2012 - 09:58:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




А если нужно и нули выводить?
Суть в том, чтобы то что ввели, то и вывелось и по тому искалось. Могут быть и нули указаны. Как же вырезать тогда их?
 
 Top
Zuldek
Отправлено: 13 Ноября, 2012 - 10:03:44
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Я не очень представляю себе как и чем у вас ищется и для чего используется.
Если нужно будет показывать на сайте число 1.000000 (в базе) я думаю, вы сможете вывести его без нулей.
Искать можете "с нулями". Покажите проблему не вижу её пока.
Хорошее сравнение типов полей для хранения не целых чисел:
http://tarlyun.com/mysql/xranenie-ne-celyx-chisel-v-mysql/

(Отредактировано автором: 13 Ноября, 2012 - 10:09:04)

 
 Top
EuGen Администратор
Отправлено: 13 Ноября, 2012 - 10:05:08
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Судя по комментариям выше, нужен обычный DOUBLE - он как раз подойдет под "все, что угодно".


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 13 Ноября, 2012 - 10:14:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




dropoff, т.е. в вашей задаче 0.1 != 0.10 т.к. они написаны различно? Тогда это - символьное поле, а не числовое.
Иначе ведущие и нули после запятой резонно не учитываются.

dropoff пишет:
а знаком после запятой(точки) может быть сколько угодно

Следовательно - float/double


-----
PostgreSQL DBA
 
 Top
dropoff
Отправлено: 13 Ноября, 2012 - 10:20:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Да, 0.1 != 0.10

Это все для фильтрации.
Например могут быть дюймы(от 1 до 100), могут быть какие-то иные параметры товара которые считаются от 0.5 до 50 или от 1 до 100 или еще как-то.
Т.е. заранее невозможно предугадать какое число будет, сколько будет знаков после запятой и т.д...

Спасибо, почитаю про double и float.
 
 Top
Мелкий Супермодератор
Отправлено: 13 Ноября, 2012 - 10:27:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




dropoff пишет:
Да, 0.1 != 0.10

Только символьные. Это не числа, ни int'ы, ни decimal'ы, ни float'ы не подходят.

С какой луны для изначально числовых данных (приведённые вами дюймы) 0.1!=0.10 - оставлю на вашей совести.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 13 Ноября, 2012 - 10:30:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Сначала я посоветовал DECIMAL. Потом появились детали, и стало ясно, что нужен DOUBLE. В конце-концов выяснилось, что данные - вообще не число (с логической точки зрения, ведь только строка "0.1" не равна "0.10"), а попросту строка.

К слову о постановке задач


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dropoff
Отправлено: 13 Ноября, 2012 - 11:50:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 310
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




Прошу прощения, что намутил воды тут)
Первый раз вообще делаю. Никогда не задумывался над этим всем. По этому четко не определил где строка, где инт.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB