Вы просто не можете использовать значения с плавающей запятой для представления валюты, поскольку они имеют неправильные свойства.Не все числа являются точно представимыми, поэтому у вас будут «таинственные» эффекты.
Лучше использовать подход с фиксированной запятой, самый простой - взять большой целочисленный тип, такой как long
, а затемпросто умножьте его на целое число, обычно 100, если все, что вам нужно, это целые центы (для валюты США).Если вам нужны доли центов, умножьте их еще на 10 000, чтобы иметь возможность представить все значения вплоть до 1/100: тысячный цент.
При этой схеме $ 1 будет:
long one_dollar = 1 * 10000;
И 13 центов будут:
long thirteen_cents = 13 * 100;
Обратите внимание, что это, в свою очередь, ограничивает сумму денег, которую вы можете представлять.В конце концов, вы можете обнаружить, что вам нужна библиотека произвольной точности, чтобы получить "неограниченные" целочисленные прецизионные значения.