2011-12-26 2 views
0

Я пытаюсь отформатировать двойное число до двух десятичных знаков в Java.Форматирование десятичных знаков в Java

Я прочитал следующее сообщение: How to round a number to n decimal places in Java

По какой-то причине, каждый из этих методов не работает на определенные номера у меня есть ..

Например:

DecimalFormat df = new DecimalFormat("#.##"); 
normalizedValue = Double.valueOf(df.format(normalizedValue)); 

Если печатать normalizedValue Я получаю такой же результат:

-78.64000000000001 

18.97 

59.469999999999985 

-63.120000000000005 

(Примечание: некоторые отформатированы правильно ... некоторые нет)

Таким образом, эти методы кажутся округлить, но мне нужно что-то, что приведет к удалению всех десятичных чисел после 2 знаков после запятой ... Любые предложения?

спасибо.

ответ

5

Строковое представление, заданное DecimalFormat.format(...), действительно имеет только 2 цифры в вашем примере. Но как только вы переконвертируете его в двойную, возникают проблемы с точностью. Бинарный базовый формат, такой как double, всегда будет показывать такие эффекты, когда вы попытаетесь представить «exakt» десятичные дроби. Вы можете изменить на BigDecimal, чтобы избавиться от таких эффектов.