Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 01:55   #1
ViRTaCe
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 24
По умолчанию Реализация поиска по цене с разными валютами.

Существует такой функционал, пользователь может задать при создании объявления валюту в которой он указывает цену к своему товару. Существует класс описывающий валюту, где есть коэффициент конвертации. Все бы хорошо, но возникает проблема как искать по цене, если валюты разные. У меня возникает только одна мысль, разрешить пользователю создавать объявление только в одной валюте, а уже при просмотре другие пользователе могут выбрать другую валюту. Есть ли еще какие-нибудь предложения?
ViRTaCe вне форума Ответить с цитированием
Старый 17.03.2013, 02:16   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Создайте базовую валюту и для всех остальных присвойте коэффициенты конвертации в базовую. Далее при поиске/добавлении любая цена конвертируется в базовую (и так же в базе и хранится кстати) и в случае чего конвертируется в соответствии с настройками отображения для пользователя итд. В данном случае само значение цены находится в модели, конечная валюта отображается во view и контроллер собственно контролирует вывод валюты (вытаскивает из модели нужное значение и передает view).

Такая схема впрочем накладывает определенные ограничения. Например так невозможно будет искать что-либо по точному значению цены (из за ошибок округления во float, хотя говорят что numeric-тип не имеет таких ограничений, так как работает не по IEEE754, а по какому-то другому стандарту/формату, короче это не "аппаратные" числа и якобы проблем с округлением у них нет).

Недостаточно внимательно прочел ваше сообщение. Но в принципе все точно так же, при добавлении пользователем объявления его цена в выбранной валюте конвертируется в базовую валюту и сохраняется в базе. Это конечно дополнительные оверхеды на вычисление конечной цены, но зато более менее универсально.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 17.03.2013 в 02:21.
Ivan_32 вне форума Ответить с цитированием
Старый 17.03.2013, 13:04   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Ivan_32 Посмотреть сообщение
Создайте базовую валюту и для всех остальных присвойте коэффициенты конвертации в базовую. Далее при поиске/добавлении любая цена конвертируется в базовую (и так же в базе и хранится кстати)
Это неправильное решение.
Иначе после первого изменения курса валют наступит рассогласование настоящей цены и величины, хранящейся в базе.
Если что-то продается по 1000 рублей, то эта сумма не должна изменяться при смене курса, даже если в качестве базовой валюты выбрана какая-то другая.

На самом деле базовая валюта нужна.
Только в база должна храниться именно оригинальная валюта, а конвертироваться в базовую - по мере необходимости (например, при смене валютного курса или просто ежедневно).
s-andriano вне форума Ответить с цитированием
Старый 17.03.2013, 13:36   #4
ViRTaCe
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 24
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Это неправильное решение.
Иначе после первого изменения курса валют наступит рассогласование настоящей цены и величины, хранящейся в базе.
Если что-то продается по 1000 рублей, то эта сумма не должна изменяться при смене курса, даже если в качестве базовой валюты выбрана какая-то другая.

На самом деле базовая валюта нужна.
Только в база должна храниться именно оригинальная валюта, а конвертироваться в базовую - по мере необходимости (например, при смене валютного курса или просто ежедневно).
Ну тогда при поиске придется конвертировать все валюты отличные от базовой.
ViRTaCe вне форума Ответить с цитированием
Старый 17.03.2013, 13:44   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Ну тогда при поиске придется конвертировать все валюты отличные от базовой.
Почему при поиске? Конвертация всех цен не при поиске , а при смене курса. При поиске конвертируется только поисковый образ
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.03.2013, 16:17   #6
ViRTaCe
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Почему при поиске? Конвертация всех цен не при поиске , а при смене курса. При поиске конвертируется только поисковый образ
Ну тоже не рационально, по всей базе проходится и менять цену.
ViRTaCe вне форума Ответить с цитированием
Старый 17.03.2013, 17:11   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от ViRTaCe Посмотреть сообщение
Ну тоже не рационально, по всей базе проходится и менять цену.
Нерационально - это немного лучше, чем неправильно.

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

На мой взгляд, для большинства случаев наиболее оптимально осуществлять пересчет как раз при поиске, т.к. время выполнения этого пересчета много меньше, чем время выполнения запроса к БД.
s-andriano вне форума Ответить с цитированием
Старый 18.03.2013, 12:37   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Валют много? Как на счет:
запрос на выборку от ххх рублей
объединить с
запрос на выборку от yyy долларов
объединить с
запрос на выборку от zzz евро
Сам вопрос такого автоматического перевода спорен. Курсы валют не постоянны и различны в различных банках различных регионов. Если это онлайн покупки, то не фиксирована комиссия банка пользователя за конвертацию денег. Показывать и хранить цены нужно в том, что указал продавец. Поиск по другим валютам в идеале делать более интеллектуальным, т.е. если человек запросил от 1000 рублей, то не нужно делать конкретно от 32,552 долларов, ибо человека наверняка и товар за 32,5 доллара устроит в этом случае.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторная работа. Реализация алгоритмов выбора и поиска BilliBong Помощь студентам 2 21.12.2011 01:59
Эл. учебник с использованием TTreeview+TWebbrowser, реализация поиска nursak Общие вопросы Delphi 14 24.04.2011 01:59
Реализация функций поиска MaxMad Помощь студентам 0 04.12.2010 15:16
Реализация метода поиска неисправности =\ Minton87 Помощь студентам 0 27.12.2009 20:13
Реализация поиска ADO+Access Artazzz БД в Delphi 5 13.10.2008 18:52