Почему приложения обычно не используют целочисленный тип данных (например, int
или long
в C ++ / Java / C #) для внутреннего представления значений валюты, в отличие от использования типа данных с плавающей запятой (float
, double
) или чего-то вроде BigDecimal
в Java?
Например, если я пишу приложение Java и у меня есть переменная, фактическое значение которой я хочу представить в долларах США (не нужно представлять доли грошей), я мог бы объявить значение int
, представляющее количество центов. Например, значение «$ 1,00» будет представлено как 100. Это кажется хорошей альтернативой использованию double
(см. Вопрос Почему бы не использовать Double или Float для представления валюты?) или BigDecimal
(который является более тяжелым объектом, чем простой примитив int
).
Очевидно, что целочисленное значение необходимо «преобразовать» (то есть из 100 в «1 доллар» или «1 доллар») перед его отображением пользователю или после ввода пользователем значения валюты, но это не кажется существенным более обременительным, чем форматирование double
или BigDecimal
для отображения.
Почему этот подход не является лучшей практикой для приложений, которые не должны представлять доли центов (или эквивалент в других типах валюты)?