float С++ и decimal postgresql

Midgard90
Дата: 16.02.2015 19:40:04
Всем добрых суток!
Не пинайте сильно ежели туплю, но с такой проблемой (денежки) столкнулся впервые, в чём беда:
Имеется база учёта товаров на складах, в ней в некоторых таблицах имеется цена закупки, цена продажи и сумма, что есть денежные значения.. (база на Postgre приложение Builder2009, подключаюсь: ODBC+ADO).
Так вот, в качестве типа данных этих величин выбрал сперва money, записывает в базу без проблем, в базе значения отлично выглядят, но при выводи таблицы в DBGrid выводится полная ерунда:
Картинка с другого сайта..
Почитал тут, нашёл такой вариант, решил проблему следующим извращением в запросе:
SELECT CAST(\042GDS\042.price AS DECIMAL(10,2)),
\042GDS\042.\042name_gds\042.......

В итоге получил логично правильные значения в DBGrid. Но длинна запроса в коде билдера стала напоминать локомотив символов...
Второй вариант: в базе типы сделал real, в билдере double или float, не важно - в С++ десятичные разделяются запятой, а в Postgre точкой... в приложении это принципиально, потому как ввод денех делается в maskedit по маске:!#######\,##;1;
Как быть? Есть ли возможность билду научить точки вместо запятой? Написал бы функцию, но так не охото парить мозг такой мелочью, да и проблема не та чтоб столько времени на неё убить.. Как будет проще реализовывать денежные вещи? Кто может сталкивался, посоветуйте..
Alexius
Дата: 16.02.2015 20:35:52
Midgard90,

картинку не видно. может выставить какой-нибудь другую локаль в lc_monetary ? ru_RU.UTF8, например.
билдер наверняка локаль системы использует для определения разделителя знаков (где-то глобально в настройках системы задается).
эээээ
Дата: 17.02.2015 00:34:46
Midgard90,

плавающие типы очень плохо для денех
попробуйте numeric небольшой длины

а в билдере поищите как стандартный decimal separator в маску именно для числа ставить.
там выглядеть будет от настроек ОС , а попадать должно нормально (если строку sql не собираете руками, а передаете параметры). в приницпе и покодить не вердно один раз.
Midgard90
Дата: 17.02.2015 08:07:48
Картинка была следующая:
Картинка с другого сайта.

Нашёл на форумах как наплевать на региональные форматы Windows:
Application->UpdateFormatSettings = false;
DecimalSeparator = '.';
ListSeparator = ',';
DateSeparator = '.';
ShortDateFormat = "dd.mm.yyyy";

Получилось сделать десятичные точкой, хвала Богам подружил. И тут билда так это не оставила, если строкой выдёргивать текущее значение:
Form2->MaskEdit2->Text = Form2->ADODataSet1->FieldValues["widht"];

Выходит в MaskEdit следующее поганство:
Картинка с другого сайта.

Обычный Edit работает нормально, пробовал в маске поставить так:!#######\,#0;1; Не помогло... Думаю отказаться от масок и использовать обычный Edit
Midgard90
Дата: 17.02.2015 08:13:27
Блин, картинки не цепляет.. Ссыли на них вот:
поганство
использование money

Из первой видно поганство: вывод "__20._5 см." впринципе перестаёт быть числом.. откуда пробел - я не вкурил.
А в первой картинке использование money, в гриде она кривая..
эээээ
Дата: 17.02.2015 08:13:50
Midgard90,

это не вопрос по пеже
сходите к бильдезеристам, к дельфийцам наконец. идеология-то общая
это всё болезни освоения инструментария, в каковом вы не в зуб ногой
Midgard90
Дата: 17.02.2015 08:19:36
Вопрос был изначально - какой тип проще использовать в postgres для денежных форматов, и почему. А это я уже вечернюю возню описал, вдруг кому пригодиться. Почему numeric?
эээээ
Дата: 17.02.2015 08:41:12
Midgard90
Вопрос был изначально - какой тип проще использовать в postgres для денежных форматов, и почему. А это я уже вечернюю возню описал, вдруг кому пригодиться. Почему numeric?
дебилдеру с дельфями лет под 30 уже небось, там этого говна--пирога понаотписано разными первопроходцами горы. почему-то всякий растебай считает что его опыт мало того что не завиральный, так ещё обязательно другому долбоклюву сгодится. и обязательно -- вывалить вот это всё в форуме по пэже

плавающая арифметика не является особостью пеже, как и проблемы с типом мани.
использование типов с фиксированной точностью -- нюмерик(пеже), он же намбер(оракел) -- это общее место, для денех, безотносительно к пеже.

долбодятелы, считающие деньги в плавающей точке, со всеми набегающими ошибками -- тоже общее место.