![]() |
|
![]() ![]() ![]() |
|
sergey_85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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. |
|||
|
||||
arial |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 772 Регистрация: 11.3.2003 Где: Архангельская обл . Репутация: нет Всего: 7 |
-------------------- Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская) |
|||
|
||||
sergey_85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
Вот какая проблема с double, выполни этот код
а вот теперь представим, что мы работаем программистами в банке и наша програ высчитывает что-то подобное, например сумму выплат по кредитам и таких вещественных переменых будет десятки тысяч, в результате получим неверное значение и по шапке от руководства!!! Это сообщение отредактировал(а) sergey_85 - 7.6.2010, 11:16 -------------------- A good design always pays off. |
|||
|
||||
arial |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 772 Регистрация: 11.3.2003 Где: Архангельская обл . Репутация: нет Всего: 7 |
Известная штука. Используй int или qint64. Храни сумму в копейках.
-------------------- Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская) |
|||
|
||||
sergey_85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
ну да бородатая тема
![]() ![]() Может double до 2х после запятой округлять, проблем не будет? Это сообщение отредактировал(а) sergey_85 - 7.6.2010, 11:15 -------------------- A good design always pays off. |
|||
|
||||
arial |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 772 Регистрация: 11.3.2003 Где: Архангельская обл . Репутация: нет Всего: 7 |
Я бы с double мучаться не стал.
-------------------- Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская) |
|||
|
||||
AlexS25 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.8.2008 Репутация: нет Всего: нет |
Аналогичная проблема! Веду проект, написанный на QT. В качестве денежного типа используется double. С помощью небольшёго изврата добился кое-какой стабильности, но это не помогло. При работе с большими числами (от 10000) проблема проявляет себя крайне остро, так-как работать с копейками парктически невозможно. =) Переписывать код и избавляться от double в потльзу int, пока нет времени. Может кто-то создал свой тип для рассчета денежных средств или выкрутился каким-то другим способом?
|
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 8 Всего: 160 |
Ни в С, ни в С++, ни в Qt нет аналога System.Decimal.
Если не хватает qint64 из QtGlobal (или int64_t из stdint.h/cstdint), что вполне вероятно, надо выбрать одно из сторонних решений:
Первые два решения прямо ориентированы на финансовые вычисления, последнее - охватывает более широкий спектр вычислений с длинной арифметикой. Советовать что-то одно не буду. На вкус и цвет... Это сообщение отредактировал(а) kemiisto - 16.3.2011, 14:16 -------------------- |
|||
|
||||
AlexS25 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.8.2008 Репутация: нет Всего: нет |
Спасибо за информацию! =)
|
|||
|
||||
MasterZiv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.1.2012 Репутация: нет Всего: нет |
Собственно, в СУБД этот тип (currency) часто так и реализован -- как 8-байтовое целое, хранящее сумму в долях денежной единицы. Только не в копейках, а в сотых копейки (MSSQL, SYBASE ASE). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |