|
|
|
Сохранение вещественного числа в базе
|
|||
|---|---|---|---|
|
#18+
Столкнулся с интересным решением, но спросить не у кого почему именно так - в базе для каждого товара сохранена цена в виде целого числа. База - sql server. Видимо такое решение было принято исходя из желание сохранить точность вещественного числа. Вот из этого всего вытекает вопрос - смысл этого? зачем такое делается? и делается ли вообще? ведь есть специальные типы для сохранности таких вещей типа decimal. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2009, 18:05 |
|
||
|
Сохранение вещественного числа в базе
|
|||
|---|---|---|---|
|
#18+
hunterman, Совершенно стандартное решение вообще-то. Действительно, корни его идут из нежелания возни с потерей точности в вещественных числах. Делается это довольно часто. А почему не используются специальные типы данных... на этот вопрос может ответить только тот кто базу проектировал. Скорее всего, в те давние года типа money в движке базе еще не было. Либо дизайнер БД настолько привык к представлению денег в копейках что даже не задумывается о возвращении к рублям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2009, 18:13 |
|
||
|
Сохранение вещественного числа в базе
|
|||
|---|---|---|---|
|
#18+
White Owl, ну в общем разе понятно и мои соображения по этому поводу были верны =) хотя база не настолько стара чтобы не обращать внимание на новые типы и облегчения работы последующим поколениям :) наверное немного глупо будет звучать вопрос "как всётаки мне получить из сохраняющегося числа - вещественное", но по другому наверное никак, проектировщика нет и не будет. ну и чтобы всё таки больше понять и научиться не подскажите какие методы преобразований чисел float->int->float существуют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2009, 18:23 |
|
||
|
Сохранение вещественного числа в базе
|
|||
|---|---|---|---|
|
#18+
huntermanнаверное немного глупо будет звучать вопрос "как всётаки мне получить из сохраняющегося числа - вещественное", но по другому наверное никак, проектировщика нет и не будет. Разделить его на 100? huntermanну и чтобы всё таки больше понять и научиться не подскажите какие методы преобразований чисел float->int->float существуют?А вот этого как раз делать не стоит. Деньги потому и хранят обычно либо в money типах (если сервер умеет работать с фиксированной точкой) либо в целых если не умеет. Конвертация во float обязательно будет приводить к артефактам округления в младших разрядах. Считай деньги в копейках всегда, раз уж они в базе хранятся как целые. Просто дели сумму на сто перед показом на экране, а при вводе суммы пользователем умножай ее на сто перед записью в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2009, 19:37 |
|
||
|
Сохранение вещественного числа в базе
|
|||
|---|---|---|---|
|
#18+
White Owl, в этом то и подвох - не копейки это, делить на 100 очень легко было бы догадаться :) если бы это проектировал я - не задумываясь применил бы специальный тип и не морочил бы голову. хранящиеся число представляет собой целое число из 10 чисел. очень похоже что его переводили через hex представления типа float->hex->int но пробы обратной операции у меня получают не предполагаемый результат, поэтому и спросил по поводу методов. зы знаю что float не нужно использовать для денежных операций, но тут похоже что именно его и используют и видимо из тех же соображений что и использования в качестве инта значения для хранения - сэкономить ресурсов(имхо ошибочное решение). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2009, 23:42 |
|
||
|
|

start [/forum/topic.php?fid=56&fpage=20&tid=2015751]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 10ms |
| total: | 156ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...