powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Типы данных для расчётов и денежных операций, плюсы и минусы
49 сообщений из 49, показаны все 2 страниц
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038439
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день,

кто уже на этом собаку съел, поделитись.
Стоит ли использовать тип Currency или Extendet как прявильно? И как будет потом меньше проблем с расхождением расчётных сумм в сравнении с банками и другими финансовыми организациями?

Спасибо
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038440
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только целые, никаких вещественных типов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038447
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если точности 4 знака хватает, то используйте Currency. Если нет, до домножайте до целого числа и используйте целые типы.

Real/Single/Double/Extended для денежных расчетов использовать нельзя никогда.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038448
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Vasilisk_
Если точности 4 знака хватает, то используйте Currency

накаких Currency, всё считать только целыми, в копейках.
точно так же считают все банки, там никаких currency нет
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038455
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Currency = type Int64
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038456
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Dmitry Arefiev
Currency = type Int64

таки Int64 лучше, чем какие-то ваши currency
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038457
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

Чем?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038458
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreat
defecator,

Чем?


наверное, тем, что в System.pas есть преобразования CurrencyToInt64, Int64ToCurrency (за точность названий не ручаюсь) ?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038461
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

Не понял преимуществ.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038463
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreat
defecator,

Не понял преимуществ.

преимущество - считать всё в целых, типа того же Int64
вместо искусственных типов, типа currency
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038467
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
преимущество - считать всё в целых, типа того же Int64
вместо искусственных типов, типа currency
Так себе аргумент.
Давай еще например double через Int64 считать.

Per rectum ad astra. (c)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038468
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
Dmitry Arefiev
Currency = type Int64

таки Int64 лучше, чем какие-то ваши currency

UInt64 лучше! :)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038469
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Array of byte, чего уж мелочиться.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038470
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreat
defecator
преимущество - считать всё в целых, типа того же Int64
вместо искусственных типов, типа currency
Так себе аргумент.
Давай еще например double через Int64 считать.

Per rectum ad astra. (c)


ога-ога.
100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями

Ты когда квитанцию в сбере по QR-коду оплачиваешь, не поленись, отсканируй телефоном, посмотри что там в строке Sum

да и квиточки с QR-кодом с магазинных чеков тоже не поленись
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038471
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями
Ты на досуге почитай как currency устроен. И в чем его отличие от double.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038472
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreat
defecator
100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями
Ты на досуге почитай как currency устроен. И в чем его отличие от double.


defecator

Ты когда квитанцию в сбере по QR-коду оплачиваешь, не поленись, отсканируй телефоном, посмотри что там в строке Sum

да и квиточки с QR-кодом с магазинных чеков тоже не поленись (по ссылке пройти)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038481
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
defecator
100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями
Ты на досуге почитай как currency устроен. И в чем его отличие от double.

Для чего тебе сотые доли копеек? Как ты их используешь?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038493
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Каши не просит.

А вообще бывают, например, ливийские дирхамы, которые 1/1000 динара.
Или рины, которые 1/1000 японской йены.

Ну а уж что там в Африке твориться - это отдельная тема.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038530
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
rgreat
пропущено...
Ты на досуге почитай как currency устроен. И в чем его отличие от double.

Для чего тебе сотые доли копеек? Как ты их используешь?


А вот пригодилось однажды, для повышения точности округления. Потом правда пришлось это выкинуть. :)

Исходно и в программе и в базе использовал для хранения денег тип integer и какое-то время было нормально.
Int64 тогда в Firebird не было, впрочем как и его самого.

Но таки неудобно, при каждом запросе делить на 100, что бы вывести в рублях, понятно для человека.
В какой-то момент решил что таки в currency и в numeric(18,4) хранить удобнее. Решил переделать. Потратил несколько месяцев но до конца такой объемный переход довести не смог. Откатил все взад и пошел заново, но теперь частями, не все сразу.
Так что у меня сейчас в базе и в программе в разных местах одновременно есть и в рублях и в копейках.

Был еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038542
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
rgreat
defecator,

Не понял преимуществ.

преимущество - считать всё в целых, типа того же Int64
вместо искусственных типов, типа currency
не нравится currency, заведи свой
лишние сущности это плохо, но необъявленные сущности ещё хуже
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038547
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем int64 спасет от операции 1/3*3? Копейками в целую часть точно не спасти
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038553
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

Цена не ходит одна. Как правило, это три величины: сумма, цена и количество.
Две храним в базе данных, третью - вычисляем. А вот что хранить, а что вычислять - исходим из задачи.
Если возьмём какой-либо документ, например, счет-фактуру,
то в записях документа вычисляем цену товара
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE WAREIN (
    XWAREIN        DX /* DX = INTEGER NOT NULL */,
    XDOCIN         DX /* DX = INTEGER NOT NULL */,
    XWARE          DX /* DX = INTEGER NOT NULL */,
    COUNTS         DMASSPLUS /* DMASSPLUS = NUMERIC(10,3) DEFAULT 1 NOT NULL CHECK(value>0) */,
    SUMM           DSUMM NOT NULL /* DSUMM = NUMERIC(15,2) DEFAULT 0 */,
....................
    CENA           COMPUTED BY (SUMM/COUNTS),
................
);


Далее идём на денормализацию, и в титульной части документа храним сумму, которую не позволяем пользователю редактировать, а вычисляем в триггере на изменение (вставку, удаление) табличной части документа.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038554
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

Хоть напрямую и не относится к обсуждению, но сильно глаз режет (без обид)
интересный подход к именованиям
автор CENA COMPUTED BY (SUMM/COUNTS),
тогда уж и остальное надо:
CENA VYCHISLENIYA(SUMMA/KOLICHESTVO)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038555
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
.......
Был еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :)


Была такая-же проблема. Делал "Общепит", всю рецептуру хранил в граммах, а потом появились Приправы-специи. В блюдо идут мало, а цена на грамм большая. Выкрутился введением дополнительной таблицы пересчёта, ну типа сколько грамм в килограмме, миллиграмм в грамме, грамм в фунте и т.п. Т.е. количество так и осталось до третьего знака, но управлять процессом можно выбором соответствующих ед. измерений, а при расчете стоимости блюда приводить с помощью этой таблицы к какой-либо одной ед. измерения, хочешь - в каратах, а хочешь в тоннах
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038560
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko
zeon11,

Хоть напрямую и не относится к обсуждению, но сильно глаз режет (без обид)
интересный подход к именованиям
автор CENA COMPUTED BY (SUMM/COUNTS),

тогда уж и остальное надо:
CENA VYCHISLENIYA(SUMMA/KOLICHESTVO)

Принимается, самому не нравится, этой таблице уже лет 30, ещё с FoхPro
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038574
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraksЗавел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту

Почему для веса не использовать один из float?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038584
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksБыл еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :)
В чем-то похожая ситуация. Программа - не бухгалтерский, а производственный учёт, какие-то сложные балансы в ней не рассчитываются, но рассчитывается стоимость изделий. В стоимость включена стоимость комплектующих, которую традиционно писали в долларах, т.к. у поставщиков и (заграничных) производителей так. При покупке, понятно, что пересчитывается в рублях. И стоимость 1 конденсатора или резистора бывает в тысячных долях доллара. Использую Currency. Продают-то их, обычно, большими партиями, сотнями или тысячами, но при расчете стоимости изделия нужно знать стоимость единицы и в БД так и хранится.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038594
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,
p.s. уточнил, у поставщиков цены и в уе, и в рублях, но традиционно в компании учитывали в уе, еще до этой программы. Ну это не принципиально с точки зрения типов данных, просто уточнил, чтобы не соврать насчёт цен.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40038666
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
fraksБыл еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :)

В чем-то похожая ситуация. Программа - не бухгалтерский, а производственный учёт, какие-то сложные балансы в ней не рассчитываются, но рассчитывается стоимость изделий. В стоимость включена стоимость комплектующих, которую традиционно писали в долларах, т.к. у поставщиков и (заграничных) производителей так. При покупке, понятно, что пересчитывается в рублях. И стоимость 1 конденсатора или резистора бывает в тысячных долях доллара. Использую Currency. Продают-то их, обычно, большими партиями, сотнями или тысячами, но при расчете стоимости изделия нужно знать стоимость единицы и в БД так и хранится.У любой сущности есть свойство "Единица изменения".
В справочнике единиц изменения можно хранить колво дробных знаков.
Для штук - 0, для граммов - 3, для мг - 6 и т.д.
И можно хранить всё в целых.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40039774
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть проблемы не в том чтобы выйграть в деньгах или проиграть а в единообразии. Видел проекты где считали деньги через типы с плавающей точкой. При вычислении скидок если считали скидку для каждой позиции (а на для конечной суммы) расхождение с банковскими расчётами доходило до 7 евро на каждые суммарные 10000 евро. Короче не стоит изобретать велосипед. Currency вролне адекватен.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40039931
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

Так Currency же тоже с плавающей точкой и вычисляется на FPU?..
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40039938
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Так Currency же тоже с плавающей точкой и вычисляется на FPU?..

http://docwiki.embarcadero.com/RADStudio/Sydney/en/Simple_Types_(Delphi)Currency is a fixed-point data type that minimizes rounding errors in monetary calculations. It is stored as a scaled 64-bit integer with the 4 least significant digits implicitly representing decimal places. When mixed with other real types in assignments and expressions, Currency values are automatically divided or multiplied by 10000.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040153
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Ясно, почему-то в гугле на эту ссылку сразу не попал, а меня вот это смутило:
https://www.oreilly.com/library/view/delphi-in-a/1565926595/re56.html
The Currency type is a 64-bit fixed-point type, with four places after the decimal point. The Currency type uses the floating-point processor, treating the Currency value as an integer.
....
To use the full 64-bit precision of the Currency type, the floating-point control word must be set to extended precision. Some Microsoft and other DLLs change the floating-point control word to double or single precision, thereby reducing the Currency type to 54 or fewer bits.
Непонятно, если Currency - это целое, то зачем считать на FPU?..
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040161
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Непонятно, если Currency - это целое, то зачем считать на FPU?..

Могу предположить, что на фпу вычислялось быстрее.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040181
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё надо в бд считать
А там редко встречаются currency
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040184
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет хранения - понятно, надо хранить в целоычисленном формате типа NUMERIC. а как бть с доступом к полю? какой использовать метод? fieldbyname('v').AsFloat, .As.Currency? И в каких переменных нативных дельфийских хранить и обрабатывать их? И какой подтип Variant использовать?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040226
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
Насчет хранения - понятно, надо хранить в целоычисленном формате типа NUMERIC. а как бть с доступом к полю? какой использовать метод? fieldbyname('v').AsFloat, .As.Currency? И в каких переменных нативных дельфийских хранить и обрабатывать их? И какой подтип Variant использовать?
а что мы хотим обрабатывать в делфи ? Незначащие итоги?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040338
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx
а что мы хотим обрабатывать в делфи ? Незначащие итоги?

странный вопрос. А в дельфи нам ничего с числами делать не надо? Например, формировать накладную с ценами, скидками, количествами и проч и т.п. Разве только на стороне БД ведутся расчеты?
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040683
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, не так важно в каком виде хранить суммы, как только появляются скидки - все равно вычислять придется с в числах плавающей запятой, с огромным хвостом цифр

Надо только не забывать округлять в нужном месте (при показе/печати)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040687
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

Если хранить и считать сразу в нужном формате, "огромного хвоста цифр" не будет.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040694
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
andreymx
а что мы хотим обрабатывать в делфи ? Незначащие итоги?

странный вопрос. А в дельфи нам ничего с числами делать не надо? Например, формировать накладную с ценами, скидками, количествами и проч и т.п. Разве только на стороне БД ведутся расчеты?
смотря что и как писать
для двухзвенки обычно в БД (если БД позволяет - мсскл/оракл)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040738
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Cobalt747,

Если хранить и считать сразу в нужном формате, "огромного хвоста цифр" не будет.
Вообще не представляю, зачем в скидках хвост цифр. Он только вреден может быть.
Сумма скидок по позициям должна быть равна общей сумме скидки чека (не считая скидок на чек, если такие водятся, я не использую).
Так или иначе - всё в копейках.

Ладно еще - налоги. Если есть необходимость налоги по позициям чеков считать, по конкретным товарам.
Если в чеке налог 5 копеек на 3 позиции - то тут хвосты пригодятся, да.
И то можно хранить не сумму, а ставку налога. И потом перемножать в отчетах по тому же алгоритму, как касса делает.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040740
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Ладно еще - налоги. Если есть необходимость налоги по позициям чеков считать, по конкретным товарам.
Если в чеке налог 5 копеек на 3 позиции - то тут хвосты пригодятся, да.
И то можно хранить не сумму, а ставку налога. И потом перемножать в отчетах по тому же алгоритму, как касса делает.
думаю, в отчётах такое вредно считать (да и вообще что-то считать кроме итога)
сначала посчитать и записать, потом отчет строить на данных

можно без коммита, чтобы откатить если не понравилось - но тут поле для фантазии широкое
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040741
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
YuRock
Ладно еще - налоги. Если есть необходимость налоги по позициям чеков считать, по конкретным товарам.
Если в чеке налог 5 копеек на 3 позиции - то тут хвосты пригодятся, да.
И то можно хранить не сумму, а ставку налога. И потом перемножать в отчетах по тому же алгоритму, как касса делает.
думаю, в отчётах такое вредно считать (да и вообще что-то считать кроме итога)
сначала посчитать и записать, потом отчет строить на данных

можно без коммита, чтобы откатить если не понравилось - но тут поле для фантазии широкое
Ну я и сумму и ставку храню навсякий)
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040785
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
defecator
преимущество - считать всё в целых, типа того же Int64
вместо искусственных типов, типа currency
Так себе аргумент.
Давай еще например double через Int64 считать.

Per rectum ad astra. (c)

Вы неправы!
В банках весь баланс считается именно в копейках, в целых числах.
Меньше головной боли, это факт.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040786
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SQL2008
rgreat
пропущено...
Так себе аргумент.
Давай еще например double через Int64 считать.

Per rectum ad astra. (c)

Вы неправы!
В банках весь баланс считается именно в копейках, в целых числах.
Меньше головной боли, это факт.


я об этом ещё неделю назад говорил, но тут есть особо упоротые на своей волне
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040827
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
s62
пропущено...

В чем-то похожая ситуация. Программа - не бухгалтерский, а производственный учёт, какие-то сложные балансы в ней не рассчитываются, но рассчитывается стоимость изделий. В стоимость включена стоимость комплектующих, которую традиционно писали в долларах, т.к. у поставщиков и (заграничных) производителей так. При покупке, понятно, что пересчитывается в рублях. И стоимость 1 конденсатора или резистора бывает в тысячных долях доллара. Использую Currency. Продают-то их, обычно, большими партиями, сотнями или тысячами, но при расчете стоимости изделия нужно знать стоимость единицы и в БД так и хранится.
У любой сущности есть свойство "Единица изменения".
В справочнике единиц изменения можно хранить колво дробных знаков.
Для штук - 0, для граммов - 3, для мг - 6 и т.д.
И можно хранить всё в целых.
Сразу не стал отвечать, т.к. у меня - частный ограниченный случай, а ТС спрашивал про общий подход к учёту финансов. Но если всё-таки ответить. Да, конечно, у учитываемых сущностей есть свойство "единица "измерения". В случае, про который я написал - это штуки. Ты имеешь в виду, что можно хранить в целых, а потом домножать на поправочный коэффициент? Типа, 1000000 для мг? Или, что можно хранить цену не для 1 шт., а например для 10 шт., 100 шт., 1000 шт.?
Вообще, Currency и хранится как целое. В БД я использую, для Firebird 2.5, тип Numeric(14, 4). Согласно документации он тоже хранится, как целое, как BIGINT. В программе использую Field.AsCurrency. Там есть некие нюансы в IBX, не буду сейчас на них останавливаться.
Тот способ, который использую я (в общем-то я насчёт хранения цен по-моему в свое время просто воспроизвел то, что было в старой БД, написанной другим человеком на Access, точно не помню, только определился с типами данных для хранения), этот способ обеспечивает требуемое хранение данных и нужные расчёты.
Если бы ввести цены например за 10 шт., 100 шт. и т.д., то тут бы появился такой момент. Что вообще с ценами на комплектующие делают в этой программе учёта? Во-первых, кто-то вводит цену, во-вторых цены могут просматривать, сравнивать, м.б. брать для каких-то внешних калькуляций, детально не знаю. В третьих цены используются для расчетов цен блоков, входящих в изделия и цен изделий. Если бы присутствовали цены не только за 1 шт., но и за 10 шт., 100, 1000, то во-первых, таких множителей наверное нужно было бы несколько. Какие-то микросхемы, микропроцессоры и стоят дорого и покупаются бывает по штукам, что-то имеет смысл мерить в десятках, что-то может быть в сотнях или тысячах. Значит и при вводе, и при просмотре нужно это отображать, а пользователю - учитывать. На мой взгляд тут - потенциальная возможность путаницы, нужно всё время смотреть - это цена за 1, за 10 или за 100. В используемом случае всё понятно - цена за 1 шт.
Если же речь - о поправочном коэффициенте, то тип Currency сам это делает, как и NUMERIC в БД.
Currency is a fixed-point data type that minimizes rounding errors in monetary calculations. It is stored as a scaled 64-bit integer with the 4 least significant digits implicitly representing decimal places. When mixed with other real types in assignments and expressions, Currency values are automatically divided or multiplied by 10000
Про NUMERIC:
Understanding the mechanism for storing and retrieving fixed-point data should help to visualise why: for storage, the number is multiplied by 10s (10 to the power of s), converting it to an integer; when read, the integer is converted back.s - это scale, в моем случае 4.
То есть я считаю, что вот в моём случае тип Currency нормально решает задачу и без дополнительных действий по пересчёту и т.п. В случае каких-то более сложных финансовых расчётов может быть какие-то неудобства были бы, не знаю, этим особо не занимался.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040922
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
Ты имеешь в виду, что можно хранить в целых, а потом домножать на поправочный коэффициент? Типа, 1000000 для мг? Или, что можно хранить цену не для 1 шт., а например для 10 шт., 100 шт., 1000 шт.?
Ну да, типа того. Цена на единицу измерения, а сумма уже умножается на кол-во штук и делится на эти 1000000 ил 100.
Согласен, что это не всегда удобно.
Для понимания проще хранить в штуках и частях штук, даже если это литры, килограммы или миллиграммы.
Я, честно говоря, так и делаю. Но теоретически возможно и коня в вакууме создать с только целыми.
...
Рейтинг: 0 / 0
Типы данных для расчётов и денежных операций, плюсы и минусы
    #40040924
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
Currency и хранится как целое. В БД я использую, для Firebird 2.5, тип Numeric(14, 4)


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


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