String.format (%. 2f, double) работает только в половине тестов - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь отформатировать двойные значения, чтобы они имели только 2 десятичных пробела:

remainingAmount = Double.parseDouble(String.format("%.2f",remainingAmount - calculatePrincipalPayment()));

Как видите, этот код форматирует двойное значение remainingAmount - calculatePrincipalPayment(), используя String.format(), затем передаетон переходит из String в Double и присваивает его двойной переменной оставшейся сумме (которая была объявлена).remainingAmount равно double, а calculatePrincipalPayment() возвращает значение double.

Проблема заключается в том, что он форматирует только часть значений, например, он может возвращать 401.37 (что является обязательным форматированием), а также 403.71999999999997.Я также уже пытался сделать форматирование с помощью DecimalFormat df = new DecimalFormat ("#. ##").

1 Ответ

0 голосов
/ 23 мая 2018

A double (или его аналог в штучной упаковке Double) не имеет возможности сохранять определенный формат, который будет использоваться при рендеринге в виде строки.Это просто необработанное значение.

Я подозреваю, что вы полагаете, что значение double, полученное при разборе из определенного формата, каким-то образом сохраняет этот формат.Это не так.

Типы с плавающей запятой неточные;не все значения могут быть точно сохранены.В тех случаях, когда точное значение не может быть сохранено, используется ближайшее сохраняемое значение - как в случае с некоторыми из ваших результатов.

...