Я пытаюсь отформатировать двойные значения, чтобы у них было только 2 десятичных пробела:
remainingAmount = Double.parseDouble(String.format("%.2f",remainingAmount - calculatePrincipalPayment()));
Как вы можете видеть, этот код форматирует двойное значение remainingAmount - calculatePrincipalPayment() с помощью String.format(), затем передает его из String в Double и присваивает его двойной переменной unknownAmount (которая была объявлена). remainingAmount удваивается, а calculatePrincipalPayment() возвращает удвоение.
Проблема в том, что он форматирует только часть значений, например, он может возвращать 401,37 (что является обязательным форматированием), а также 403,71999999999997. Я также уже пытался выполнить форматирование с помощью DecimalFormat df = new DecimalFormat ("#. ##").
Если вы запустите свой код для 403.71999999999997, вы получите 403.72. Можете ли вы привести пример, который дает результат, который вы имеете в виду?
Добро пожаловать в SO! Первое, что я замечаю, это то, что вы переходите от двойника к строке к двойнику в одной строке. Нет необходимости переходить к строке, пока вы, наконец, не будете готовы к печати. Отредактируйте свой пост, чтобы создать Минимальный, полный и поддающийся проверке пример вашего кода вместе с примерами входных и выходных данных, чтобы мы могли лучше вам помочь.




double (или его аналог Double в штучной упаковке) не имеет емкости для хранения определенного формата, который будет использоваться при рендеринге в виде строки. Это просто необработанное значение.
Я подозреваю, что вы полагаете, что значение double, полученное путем синтаксического анализа из определенного формата, каким-то образом сохраняет этот формат. Это не тот случай.
Типы с плавающей запятой неточны; не все значения можно точно сохранить. В случаях, когда точное значение не может быть сохранено, используется ближайшее сохраняемое значение - как в случае с некоторыми из ваших результатов.
У
doubleнет формата, есть только строки, поэтому при синтаксическом анализе он не делает того, что вы думаете.