Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Сохранение вещественного числа в базе / 5 сообщений из 5, страница 1 из 1
23.07.2009, 18:05
    #36106324
hunterman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение вещественного числа в базе
Столкнулся с интересным решением, но спросить не у кого почему именно так - в базе для каждого товара сохранена цена в виде целого числа. База - sql server. Видимо такое решение было принято исходя из желание сохранить точность вещественного числа.

Вот из этого всего вытекает вопрос - смысл этого? зачем такое делается? и делается ли вообще? ведь есть специальные типы для сохранности таких вещей типа decimal.

спасибо.
...
Рейтинг: 0 / 0
23.07.2009, 18:13
    #36106349
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение вещественного числа в базе
hunterman,

Совершенно стандартное решение вообще-то.
Действительно, корни его идут из нежелания возни с потерей точности в вещественных числах.
Делается это довольно часто.
А почему не используются специальные типы данных... на этот вопрос может ответить только тот кто базу проектировал. Скорее всего, в те давние года типа money в движке базе еще не было. Либо дизайнер БД настолько привык к представлению денег в копейках что даже не задумывается о возвращении к рублям.
...
Рейтинг: 0 / 0
23.07.2009, 18:23
    #36106373
hunterman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение вещественного числа в базе
White Owl,

ну в общем разе понятно и мои соображения по этому поводу были верны =) хотя база не настолько стара чтобы не обращать внимание на новые типы и облегчения работы последующим поколениям :)

наверное немного глупо будет звучать вопрос "как всётаки мне получить из сохраняющегося числа - вещественное", но по другому наверное никак, проектировщика нет и не будет.
ну и чтобы всё таки больше понять и научиться не подскажите какие методы преобразований чисел float->int->float существуют?
...
Рейтинг: 0 / 0
23.07.2009, 19:37
    #36106498
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение вещественного числа в базе
huntermanнаверное немного глупо будет звучать вопрос "как всётаки мне получить из сохраняющегося числа - вещественное", но по другому наверное никак, проектировщика нет и не будет. Разделить его на 100?
huntermanну и чтобы всё таки больше понять и научиться не подскажите какие методы преобразований чисел float->int->float существуют?А вот этого как раз делать не стоит. Деньги потому и хранят обычно либо в money типах (если сервер умеет работать с фиксированной точкой) либо в целых если не умеет. Конвертация во float обязательно будет приводить к артефактам округления в младших разрядах.
Считай деньги в копейках всегда, раз уж они в базе хранятся как целые. Просто дели сумму на сто перед показом на экране, а при вводе суммы пользователем умножай ее на сто перед записью в базу.
...
Рейтинг: 0 / 0
23.07.2009, 23:42
    #36106741
hunterman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение вещественного числа в базе
White Owl,

в этом то и подвох - не копейки это, делить на 100 очень легко было бы догадаться :) если бы это проектировал я - не задумываясь применил бы специальный тип и не морочил бы голову.

хранящиеся число представляет собой целое число из 10 чисел. очень похоже что его переводили через hex представления типа float->hex->int но пробы обратной операции у меня получают не предполагаемый результат, поэтому и спросил по поводу методов.

зы знаю что float не нужно использовать для денежных операций, но тут похоже что именно его и используют и видимо из тех же соображений что и использования в качестве инта значения для хранения - сэкономить ресурсов(имхо ошибочное решение).
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Сохранение вещественного числа в базе / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]