|
|
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Всем добрый день, кто уже на этом собаку съел, поделитись. Стоит ли использовать тип Currency или Extendet как прявильно? И как будет потом меньше проблем с расхождением расчётных сумм в сравнении с банками и другими финансовыми организациями? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 18:12 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Только целые, никаких вещественных типов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 18:27 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Если точности 4 знака хватает, то используйте Currency. Если нет, до домножайте до целого числа и используйте целые типы. Real/Single/Double/Extended для денежных расчетов использовать нельзя никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 20:00 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Если точности 4 знака хватает, то используйте Currency накаких Currency, всё считать только целыми, в копейках. точно так же считают все банки, там никаких currency нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 20:02 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Currency = type Int64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:02 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Currency = type Int64 таки Int64 лучше, чем какие-то ваши currency ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:07 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
defecator, Чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:18 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat defecator, Чем? наверное, тем, что в System.pas есть преобразования CurrencyToInt64, Int64ToCurrency (за точность названий не ручаюсь) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:23 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
defecator, Не понял преимуществ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:28 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat defecator, Не понял преимуществ. преимущество - считать всё в целых, типа того же Int64 вместо искусственных типов, типа currency ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:31 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
defecator преимущество - считать всё в целых, типа того же Int64 вместо искусственных типов, типа currency Давай еще например double через Int64 считать. Per rectum ad astra. (c) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:46 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
defecator Dmitry Arefiev Currency = type Int64 таки Int64 лучше, чем какие-то ваши currency UInt64 лучше! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:47 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, Array of byte, чего уж мелочиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:50 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat defecator преимущество - считать всё в целых, типа того же Int64 вместо искусственных типов, типа currency Давай еще например double через Int64 считать. Per rectum ad astra. (c) ога-ога. 100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями Ты когда квитанцию в сбере по QR-коду оплачиваешь, не поленись, отсканируй телефоном, посмотри что там в строке Sum да и квиточки с QR-кодом с магазинных чеков тоже не поленись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:51 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
defecator 100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:53 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat defecator 100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями defecator Ты когда квитанцию в сбере по QR-коду оплачиваешь, не поленись, отсканируй телефоном, посмотри что там в строке Sum да и квиточки с QR-кодом с магазинных чеков тоже не поленись (по ссылке пройти) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 21:54 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat defecator 100 тыщ копеек из Int64 потом проще и точнее перевести в рубли, чем ваши double с округлениями Для чего тебе сотые доли копеек? Как ты их используешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 22:46 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, Каши не просит. А вообще бывают, например, ливийские дирхамы, которые 1/1000 динара. Или рины, которые 1/1000 японской йены. Ну а уж что там в Африке твориться - это отдельная тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2021, 23:24 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
ъъъъъ rgreat пропущено... Ты на досуге почитай как currency устроен. И в чем его отличие от double. Для чего тебе сотые доли копеек? Как ты их используешь? А вот пригодилось однажды, для повышения точности округления. Потом правда пришлось это выкинуть. :) Исходно и в программе и в базе использовал для хранения денег тип integer и какое-то время было нормально. Int64 тогда в Firebird не было, впрочем как и его самого. Но таки неудобно, при каждом запросе делить на 100, что бы вывести в рублях, понятно для человека. В какой-то момент решил что таки в currency и в numeric(18,4) хранить удобнее. Решил переделать. Потратил несколько месяцев но до конца такой объемный переход довести не смог. Откатил все взад и пошел заново, но теперь частями, не все сразу. Так что у меня сейчас в базе и в программе в разных местах одновременно есть и в рублях и в копейках. Был еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 04:05 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
defecator rgreat defecator, Не понял преимуществ. преимущество - считать всё в целых, типа того же Int64 вместо искусственных типов, типа currency лишние сущности это плохо, но необъявленные сущности ещё хуже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 08:12 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
а чем int64 спасет от операции 1/3*3? Копейками в целую часть точно не спасти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 08:36 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
hlopotun, Цена не ходит одна. Как правило, это три величины: сумма, цена и количество. Две храним в базе данных, третью - вычисляем. А вот что хранить, а что вычислять - исходим из задачи. Если возьмём какой-либо документ, например, счет-фактуру, то в записях документа вычисляем цену товара Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Далее идём на денормализацию, и в титульной части документа храним сумму, которую не позволяем пользователю редактировать, а вычисляем в триггере на изменение (вставку, удаление) табличной части документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 09:17 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
zeon11, Хоть напрямую и не относится к обсуждению, но сильно глаз режет (без обид) интересный подход к именованиям автор CENA COMPUTED BY (SUMM/COUNTS), тогда уж и остальное надо: CENA VYCHISLENIYA(SUMMA/KOLICHESTVO) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 09:29 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
fraks ....... Был еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :) Была такая-же проблема. Делал "Общепит", всю рецептуру хранил в граммах, а потом появились Приправы-специи. В блюдо идут мало, а цена на грамм большая. Выкрутился введением дополнительной таблицы пересчёта, ну типа сколько грамм в килограмме, миллиграмм в грамме, грамм в фунте и т.п. Т.е. количество так и осталось до третьего знака, но управлять процессом можно выбором соответствующих ед. измерений, а при расчете стоимости блюда приводить с помощью этой таблицы к какой-либо одной ед. измерения, хочешь - в каратах, а хочешь в тоннах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 09:29 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Gerasimenko zeon11, Хоть напрямую и не относится к обсуждению, но сильно глаз режет (без обид) интересный подход к именованиям автор CENA COMPUTED BY (SUMM/COUNTS), тогда уж и остальное надо: CENA VYCHISLENIYA(SUMMA/KOLICHESTVO) Принимается, самому не нравится, этой таблице уже лет 30, ещё с FoхPro ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 09:33 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
fraksЗавел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту Почему для веса не использовать один из float? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 10:26 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
fraksБыл еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :) В чем-то похожая ситуация. Программа - не бухгалтерский, а производственный учёт, какие-то сложные балансы в ней не рассчитываются, но рассчитывается стоимость изделий. В стоимость включена стоимость комплектующих, которую традиционно писали в долларах, т.к. у поставщиков и (заграничных) производителей так. При покупке, понятно, что пересчитывается в рублях. И стоимость 1 конденсатора или резистора бывает в тысячных долях доллара. Использую Currency. Продают-то их, обычно, большими партиями, сотнями или тысячами, но при расчете стоимости изделия нужно знать стоимость единицы и в БД так и хранится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 10:43 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
s62, p.s. уточнил, у поставщиков цены и в уе, и в рублях, но традиционно в компании учитывали в уе, еще до этой программы. Ну это не принципиально с точки зрения типов данных, просто уточнил, чтобы не соврать насчёт цен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 11:01 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
s62 fraksБыл еще у меня пролет, с типом данных и точностью. Завел в базе поле под вес товара. Ну и типа в граммах - куда еще точнее, пользователи все равно точнее не взвесят. Ну и сделал. А потом, когда начали работать с этим полем плотнее, обнаружился косяк. С товарами с малым весом. В частности это открытки. Попробуй задай вес одной открытки, а потом посчитай сколько будет весить 5000 открыток. Набирается большая ошибка. currency тут был бы очень к месту :) В чем-то похожая ситуация. Программа - не бухгалтерский, а производственный учёт, какие-то сложные балансы в ней не рассчитываются, но рассчитывается стоимость изделий. В стоимость включена стоимость комплектующих, которую традиционно писали в долларах, т.к. у поставщиков и (заграничных) производителей так. При покупке, понятно, что пересчитывается в рублях. И стоимость 1 конденсатора или резистора бывает в тысячных долях доллара. Использую Currency. Продают-то их, обычно, большими партиями, сотнями или тысячами, но при расчете стоимости изделия нужно знать стоимость единицы и в БД так и хранится.У любой сущности есть свойство "Единица изменения". В справочнике единиц изменения можно хранить колво дробных знаков. Для штук - 0, для граммов - 3, для мг - 6 и т.д. И можно хранить всё в целых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 13:50 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Суть проблемы не в том чтобы выйграть в деньгах или проиграть а в единообразии. Видел проекты где считали деньги через типы с плавающей точкой. При вычислении скидок если считали скидку для каждой позиции (а на для конечной суммы) расхождение с банковскими расчётами доходило до 7 евро на каждые суммарные 10000 евро. Короче не стоит изобретать велосипед. Currency вролне адекватен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2021, 01:09 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Mikhail Tchervonenko, Так Currency же тоже с плавающей точкой и вычисляется на FPU?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2021, 15:53 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2021, 16:02 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
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?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2021, 19:10 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
alekcvp Непонятно, если Currency - это целое, то зачем считать на FPU?.. Могу предположить, что на фпу вычислялось быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2021, 20:09 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Всё надо в бд считать А там редко встречаются currency ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2021, 23:23 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Насчет хранения - понятно, надо хранить в целоычисленном формате типа NUMERIC. а как бть с доступом к полю? какой использовать метод? fieldbyname('v').AsFloat, .As.Currency? И в каких переменных нативных дельфийских хранить и обрабатывать их? И какой подтип Variant использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2021, 23:34 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
GrigoriyFomin Насчет хранения - понятно, надо хранить в целоычисленном формате типа NUMERIC. а как бть с доступом к полю? какой использовать метод? fieldbyname('v').AsFloat, .As.Currency? И в каких переменных нативных дельфийских хранить и обрабатывать их? И какой подтип Variant использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2021, 11:23 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
andreymx а что мы хотим обрабатывать в делфи ? Незначащие итоги? странный вопрос. А в дельфи нам ничего с числами делать не надо? Например, формировать накладную с ценами, скидками, количествами и проч и т.п. Разве только на стороне БД ведутся расчеты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2021, 22:43 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Мне кажется, не так важно в каком виде хранить суммы, как только появляются скидки - все равно вычислять придется с в числах плавающей запятой, с огромным хвостом цифр Надо только не забывать округлять в нужном месте (при показе/печати) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2021, 20:37 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
Cobalt747, Если хранить и считать сразу в нужном формате, "огромного хвоста цифр" не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2021, 21:00 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
GrigoriyFomin andreymx а что мы хотим обрабатывать в делфи ? Незначащие итоги? странный вопрос. А в дельфи нам ничего с числами делать не надо? Например, формировать накладную с ценами, скидками, количествами и проч и т.п. Разве только на стороне БД ведутся расчеты? для двухзвенки обычно в БД (если БД позволяет - мсскл/оракл) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2021, 21:30 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat Cobalt747, Если хранить и считать сразу в нужном формате, "огромного хвоста цифр" не будет. Сумма скидок по позициям должна быть равна общей сумме скидки чека (не считая скидок на чек, если такие водятся, я не использую). Так или иначе - всё в копейках. Ладно еще - налоги. Если есть необходимость налоги по позициям чеков считать, по конкретным товарам. Если в чеке налог 5 копеек на 3 позиции - то тут хвосты пригодятся, да. И то можно хранить не сумму, а ставку налога. И потом перемножать в отчетах по тому же алгоритму, как касса делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2021, 23:29 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
YuRock Ладно еще - налоги. Если есть необходимость налоги по позициям чеков считать, по конкретным товарам. Если в чеке налог 5 копеек на 3 позиции - то тут хвосты пригодятся, да. И то можно хранить не сумму, а ставку налога. И потом перемножать в отчетах по тому же алгоритму, как касса делает. сначала посчитать и записать, потом отчет строить на данных можно без коммита, чтобы откатить если не понравилось - но тут поле для фантазии широкое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2021, 23:40 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
andreymx YuRock Ладно еще - налоги. Если есть необходимость налоги по позициям чеков считать, по конкретным товарам. Если в чеке налог 5 копеек на 3 позиции - то тут хвосты пригодятся, да. И то можно хранить не сумму, а ставку налога. И потом перемножать в отчетах по тому же алгоритму, как касса делает. сначала посчитать и записать, потом отчет строить на данных можно без коммита, чтобы откатить если не понравилось - но тут поле для фантазии широкое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2021, 23:54 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
rgreat defecator преимущество - считать всё в целых, типа того же Int64 вместо искусственных типов, типа currency Давай еще например double через Int64 считать. Per rectum ad astra. (c) Вы неправы! В банках весь баланс считается именно в копейках, в целых числах. Меньше головной боли, это факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 09:52 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
SQL2008 rgreat пропущено... Так себе аргумент. Давай еще например double через Int64 считать. Per rectum ad astra. (c) Вы неправы! В банках весь баланс считается именно в копейках, в целых числах. Меньше головной боли, это факт. я об этом ещё неделю назад говорил, но тут есть особо упоротые на своей волне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 09:55 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
YuRock s62 пропущено... В чем-то похожая ситуация. Программа - не бухгалтерский, а производственный учёт, какие-то сложные балансы в ней не рассчитываются, но рассчитывается стоимость изделий. В стоимость включена стоимость комплектующих, которую традиционно писали в долларах, т.к. у поставщиков и (заграничных) производителей так. При покупке, понятно, что пересчитывается в рублях. И стоимость 1 конденсатора или резистора бывает в тысячных долях доллара. Использую Currency. Продают-то их, обычно, большими партиями, сотнями или тысячами, но при расчете стоимости изделия нужно знать стоимость единицы и в БД так и хранится. В справочнике единиц изменения можно хранить колво дробных знаков. Для штук - 0, для граммов - 3, для мг - 6 и т.д. И можно хранить всё в целых. Вообще, 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 нормально решает задачу и без дополнительных действий по пересчёту и т.п. В случае каких-то более сложных финансовых расчётов может быть какие-то неудобства были бы, не знаю, этим особо не занимался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 12:16 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
s62 Ты имеешь в виду, что можно хранить в целых, а потом домножать на поправочный коэффициент? Типа, 1000000 для мг? Или, что можно хранить цену не для 1 шт., а например для 10 шт., 100 шт., 1000 шт.? Согласен, что это не всегда удобно. Для понимания проще хранить в штуках и частях штук, даже если это литры, килограммы или миллиграммы. Я, честно говоря, так и делаю. Но теоретически возможно и коня в вакууме создать с только целыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 16:24 |
|
||
|
Типы данных для расчётов и денежных операций, плюсы и минусы
|
|||
|---|---|---|---|
|
#18+
s62 Currency и хранится как целое. В БД я использую, для Firebird 2.5, тип Numeric(14, 4) Так или иначе, всё что можно хранить лучше стараться в целых (или Currency - это псевдо-целое), чтобы не маяться с округлениями/сравнениями. Для денег это возможно чаще всего. Но даже и для денег не всегда просто. Бывают закупочные цены с длинным хвостом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 16:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037657]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 466ms |

| 0 / 0 |
