Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Qt и тип данных Currency, есть подобный или как заменить? 
:(
    Опции темы
sergey_85
Дата 5.6.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



Привет!

Возникла проблема при использовании типа double для подсчета денежных выражений, конечно она не нова, но в других фреймворках есть спец типы наподобии decimal (C#), Currency(C++ Builder)

А Qt'шники что-нибудь предлагают нам или как решить проблемку?

Это сообщение отредактировал(а) sergey_85 - 7.6.2010, 11:16


--------------------
A good design always pays off.
PM MAIL   Вверх
arial
  Дата 7.6.2010, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: нет
Всего: 7



Цитата(sergey_85 @  5.6.2010,  12:17 Найти цитируемый пост)
Возникла проблема при использовании типа double для подсчета денежных выражений
А какая, собственно, проблема?



--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
sergey_85
Дата 7.6.2010, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



Вот какая проблема с double, выполни этот код

Код

double x1 = 900.99; //в памяти будет значение 900.99000000000001
double x2 = 890.99; //в памяти будет значение 900.99000000000001

double x3 = x1 + x2; //в памяти будет значение 1791.98


а вот теперь представим, что мы работаем программистами в банке и наша програ высчитывает что-то подобное, например сумму выплат по кредитам и таких вещественных переменых будет десятки тысяч, в результате получим неверное значение и по шапке от руководства!!!

 

Это сообщение отредактировал(а) sergey_85 - 7.6.2010, 11:16


--------------------
A good design always pays off.
PM MAIL   Вверх
arial
Дата 7.6.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: нет
Всего: 7



Известная штука. Используй int или qint64. Храни сумму в копейках.


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
sergey_85
Дата 7.6.2010, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: нет
Всего: 1



ну да бородатая тема  smile , только раньше в С++ Builder и C# работал, там встроенные типы были, не парился smile

Может double до 2х после запятой округлять, проблем не будет?

Это сообщение отредактировал(а) sergey_85 - 7.6.2010, 11:15


--------------------
A good design always pays off.
PM MAIL   Вверх
arial
Дата 7.6.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: нет
Всего: 7



Я бы с double мучаться не стал.


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
AlexS25
Дата 16.3.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.8.2008

Репутация: нет
Всего: нет



Аналогичная проблема! Веду проект, написанный на QT. В качестве денежного типа используется double. С помощью небольшёго изврата добился кое-какой стабильности, но это не помогло. При работе с большими числами (от 10000) проблема проявляет себя крайне остро, так-как работать с копейками парктически невозможно. =) Переписывать код и избавляться от double в потльзу int, пока нет времени. Может кто-то создал свой тип для рассчета денежных средств или выкрутился каким-то другим способом?
PM MAIL   Вверх
kemiisto
Дата 16.3.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 8
Всего: 160



Ни в С, ни в С++, ни в Qt нет аналога System.Decimal.

Если не хватает qint64 из QtGlobal (или int64_t из stdint.h/cstdint), что вполне вероятно, надо выбрать одно из сторонних решений: 

Первые два решения прямо ориентированы на финансовые вычисления, последнее - охватывает более широкий спектр вычислений с длинной арифметикой. Советовать что-то одно не буду. На вкус и цвет...




Это сообщение отредактировал(а) kemiisto - 16.3.2011, 14:16


--------------------
PM MAIL WWW GTalk Jabber   Вверх
AlexS25
Дата 16.3.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.8.2008

Репутация: нет
Всего: нет



Спасибо за информацию! =)
PM MAIL   Вверх
MasterZiv
Дата 11.4.2013, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 27.1.2012

Репутация: нет
Всего: нет



Цитата(arial @ 7.6.2010,  11:10)
Известная штука. Используй int или qint64. Храни сумму в копейках.

Собственно, в СУБД этот тип (currency) часто так и реализован -- как 8-байтовое целое, хранящее сумму в долях денежной единицы.
Только не в копейках, а в сотых копейки (MSSQL, SYBASE ASE).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1217 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.