Такая ситуация, пишу приложение в котором пользователь указывает необходимое кол-во товара после чего видит итоговую сумму(ценаТовара*КолВо). Проблема в следующем, т.к. в java вот это выражение:
double a = 2.0 - 1.1;
равно не 0.9 , а вот чему 0.89999999999999991 , то возник такой вопрос, как мне считать общую сумму товара, чтобы избежать подобных неточностей? Цена за единицу товара у меня представлена типом float, с ним такие же проблемы? Думал округлять итоговую сумму до двух знаков, но тут тоже кажется могут быть проблемы, и наличие погрешности в расчетах зависит прямо пропорционально от кол-ва умножаемого на цену товара, чем больше тем больше погрешность.
Зачем такие сложности, начинайте всегда с простого. Тем более вы находитесь на этапе разработки. Храните суммы в типе int, а потом просто поделите на 100 для получения копеек. Например, стоимость = 52025 руб, что означает 520 руб 25 коп.
Преимущества:
Не все десятичные дроби можно точно представить в виде double или float. Это связано с особенностью хранения данных в формате с плавающей точкой.
При работе с финансами можно использовать класс BigDecimal, который обеспечит необходимую точность.
В Вашем случае:
BigDecimal value = new BigDecimal("2.0").subtract(new BigDecimal("1.1"));
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости