Почему приложения обычно не используют int для внутреннего представления значений валюты?

Почему приложениям обычно используют целочисленный тип данных (например, int или long в C ++ / Java / C #) для внутреннего представления значений валюты, в отличие от использования типа данных с плавающей запятой ( float , double ) или что-то вроде Java BigDecimal ?

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

Очевидно, что целочисленное значение должно быть «переведено» (то есть из 100 в «1 доллар» или «1 доллар») перед его отображением пользователю или после ввода пользователем денежного значения, но это не делает этого. Это кажется значительно более обременительным, чем форматирование double или BigDecimal для отображения.

Почему этот подход не является наилучшей практикой для приложений, которые не должны представлять доли центов (или эквивалент в других типах валюты)?

12
задан Community 23 May 2017 в 12:24
поделиться