2011-12-16 3 views
-1

Я использую следующий код:Возвращаясь ZERO с определенной точностью, используя BigDecimal

//... 
else if(number.equals(ZERO)) 
    return BigDecimal.ZERO.setScale(precision); 

Функция вызывается с помощью

BigDecimal num = new BigDecimal(0); 
System.out.println(Newton.sqrt(num, 5)); 

и всегда возвращает 0E-100 (независимо от точности при условии,), но мне нужно 0,00000 и т. д. Спасибо

+0

Обратите внимание, что 'BigDecimal.ZERO' существует, вам не нужно определять свою собственную константу для этого. – fge

+0

Спасибо, я изменил это, но он не решает проблему, к сожалению. – jgpt

+3

Обратите также внимание, что 'BigDecimal.equals (Object)' будет возвращать 'true' только * iff * значение двух значений * и * то же самое. Попробуйте 'BigDecimal.compareTo (BigDecimal) == 0' вместо этого. Хотя, я не уверен, какова цель вашего кода. –

ответ

0

Если ваш первый фрагмент кода, если он является частью метода Newton.sqrt, то я считаю само собой разумеющимся, что это возвращение не выполняется. Вы можете ознакомиться с документацией BigDecimal.equals.

Что бы работать так:

else if(number.signum() == 0) 
    return BigDecimal.ZERO.setScale(precision); 

Это, конечно, работает только если метод не некоторые еще возвращаться д return до того, что один и number действительно точно ноль (без учета масштаба здесь). Поскольку Newton намекает на алгоритм аппроксимации, это, скорее всего, не так. Если это предположение верно, то вы должны пересмотреть свои требования.

+0

Проблема не в том, что часть «if» не работает, я уже проверил, что блок кода выполнен. Проблема в том, что «0E-100» - это возвращаемое значение, если я, например, выбираю точность = 20. Я бы ожидал, что System.out.print (BigDecimal.ZEROsetScale (5)) напечатает «0.00000» вместо «0E-100» – jgpt

+0

@jgpt Если я выполню 'System.out.println (BigDecimal.ZERO.setScale (5)), ; 'затем я получаю' 0,00000'. Поэтому я думаю, что я прав, если вы не можете предоставить пример [SSCCE] (http://sscce.org/), доказывающий обратное. –

+0

System.out.println (BigDecimal.ZERO.setScale (50)); возвращает «0E-50» для меня. Представление «0E -», похоже, начинается с точности = 7. – jgpt

Смежные вопросы