LINUX.ORG.RU

Что такое денежный формат?
Разве можно хранить деньги в IEEE754?
Те, кто хранит так - не понимают как устроены компьютеры и должны быть подвергнуты отстранению от работы с деньгами. Им придётся постоянно выщитывать разности, и несправедливо на какие-то счета их переначислять (чтобы сохранить балланс).
Деньги надо хранить в центах!

siberean
()
Ответ на: комментарий от siberean

Напомню - при больших суммах накопление ошибок может привести к большим суммам.
И кому, интересно, пришло в голову не использовать самый простой способ - центы?

siberean
()
Ответ на: комментарий от namezys

А ты не знаешь - что любое применение точности (IEEE754, float, double etc) подразумевает округление, а любое округление - подразумевает накопление ошибки, и только целые - не накапливают ошибку?

siberean
()
Ответ на: комментарий от siberean

Сделаю одну оговорку. Да, в банке или бухгалтерии могут быть какие-то хорошо отделённые от процесса калькуляторы, которые могут распределять сумму - по какому-то количеству счетов (т.е. делить), и тогда локальное применение IEEE754 оправдано. Но только эта локальная аппликация - должна убрать за собой «плавающий» мусор, который накопился, в конце, почти как GC, перераспределив остатки как надо (согласно логике калькулятора). Но весь процесс хранения - должен быть в центах - для дисциплины (чтобы не было огромных остатков, которые возникли непонятно откуда, из всего процесса).

siberean
()
Ответ на: комментарий от namezys

самая педантичная точность - в банке. ты сходи у них спроси, чем они оперируют :)

Deleted
()
Ответ на: комментарий от anon1984

Да уж, деньги надо хранить только в decimal. Использовать тут float - это преступление!

И вообще, денежная величина (число) неотделима от единицы измерения (валюта). 3 рубля и 3 доллара - это совсем разные деньги! Таким образом, в С денежку надо хранить в структуре {валюта, сумма}. Как определять валюту - зависит от условий. Может, хватит обычного enum, а может и не хватит.

Zloddey
()
Ответ на: комментарий от namezys

а то, что обычно точность промежуточных вычислений по стандарту приняты за 0.01 цент ты не знал?

Проблема в том, что конечным двоичным числом с плавающей точкой невозможно представить десятичную дробь 0.01. По этому при вычислениях, касающихся денег, обычно используют числа с фиксированной _десятичной_ точкой.

Deleted
()

А округление денежных единиц при расчётах - это вообще целая наука, блин =).

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.