Хранение денежного эквивалента в целочисленном типе данных может быть реализовано двумя основными способами:
-
В наименьших неделимых единицах:
- Хранить сумму в центах, копейках, сатоши и т.д.
- Преобразование при вводе/выводе пользователя.
c
-
Использование фиксированной точки:
- Умножение суммы на фиксированный множитель при хранении.
- Множитель обычно степень 10 (10, 100, 1000...).
- Преобразование при вводе/выводе и арифметических операциях (деление после умножения).
c
Преимущества:
- Избежание ошибок округления, присущих типам с плавающей запятой (
float, double).
- Быстрые целочисленные операции.
Недостатки:
- Ограниченный диапазон значений по сравнению с типами с плавающей запятой (зависит от размера
integer).
- Необходимость ручного масштабирования при выполнении операций (особенно деления).
- Потенциальная потеря точности при первоначальном переводе из десятичного представления.
Использование long long рекомендуется для избежания переполнения при больших суммах или в процессе промежуточных вычислений. Метод с наименьшими единицами обычно проще в реализации.