Что такое денежный формат?
Разве можно хранить деньги в IEEE754?
Те, кто хранит так - не понимают как устроены компьютеры и должны быть подвергнуты отстранению от работы с деньгами. Им придётся постоянно выщитывать разности, и несправедливо на какие-то счета их переначислять (чтобы сохранить балланс).
Деньги надо хранить в центах!
Напомню - при больших суммах накопление ошибок может привести к большим суммам.
И кому, интересно, пришло в голову не использовать самый простой способ - центы?
А ты не знаешь - что любое применение точности (IEEE754, float, double etc) подразумевает округление, а любое округление - подразумевает накопление ошибки, и только целые - не накапливают ошибку?
Сделаю одну оговорку. Да, в банке или бухгалтерии могут быть какие-то хорошо отделённые от процесса калькуляторы, которые могут распределять сумму - по какому-то количеству счетов (т.е. делить), и тогда локальное применение IEEE754 оправдано. Но только эта локальная аппликация - должна убрать за собой «плавающий» мусор, который накопился, в конце, почти как GC, перераспределив остатки как надо (согласно логике калькулятора). Но весь процесс хранения - должен быть в центах - для дисциплины (чтобы не было огромных остатков, которые возникли непонятно откуда, из всего процесса).
Да уж, деньги надо хранить только в decimal. Использовать тут float - это преступление!
И вообще, денежная величина (число) неотделима от единицы измерения (валюта). 3 рубля и 3 доллара - это совсем разные деньги! Таким образом, в С денежку надо хранить в структуре {валюта, сумма}. Как определять валюту - зависит от условий. Может, хватит обычного enum, а может и не хватит.
а то, что обычно точность промежуточных вычислений по стандарту приняты за 0.01 цент ты не знал?
Проблема в том, что конечным двоичным числом с плавающей точкой невозможно представить десятичную дробь 0.01. По этому при вычислениях, касающихся денег, обычно используют числа с фиксированной _десятичной_ точкой.