2012-06-22 4 views
1

Использование стандартного класса Java Double для разбора числа с плавающей запятой с мантиссой, кажется, пропускает знак + из показателя экспоненты.Анализ числа с плавающей запятой с мантиссой в Java

Например:

Double.parseDouble("1258124354E-28") returns 1.258124354E-19, but 
Double.parseDouble("1243544322E+24") returns 1.243544322E33 (not E+33) 

Есть ли способ, чтобы получить знак + с помощью распашные, без строки постобработки?

Класс BigDecimal делает лучшую работу, например.

new BigDecimal("1243544322E+24").toString() does return 1.243544322E+33 

, но это, как правило, медленнее, чем Double, который показывает, в отделении интенсивной обработки.

+0

Не печатайте его с помощью toString, используйте экземпляр NumberFormat. –

ответ

6

Необходимо провести различие между значением , хранящимся в double, и его строковым представлением.

A double не хранит текстовое представление вообще. 1.243544322E33 является 1.243544322E + 33. Они одинаковы.

Теперь, если вы хотите работать, как вы форматdouble значение обратно в String, это другое дело - но разборе вы делаете это хорошо. Вы не теряете никакой информации.

+0

Несомненно. Я не беспокоился о том, что информация потеряна, просто для знака требуется знак +. – PNS

2

Jon правильный, как указано выше, его правильное представление в памяти. Если вы хотите, чтобы он отображался с символом + на мантиссе, вы говорите о форматировании строки двойным.

Long winded official formatter reference

import java.util.Formatter; 

double myDouble = Double.parseDouble("1243544322E+24"); 

Formatter formatter = new Formatter(); 
formatter.format("%+E", myDouble); //This should return with what you want, though with an extra + infront of the number 

Я не побежал этот код, так что я не 100% уверен, что это будет делать эту работу. + В спецификаторе формата заставляет его поместить знак + или - для любого числа ... Я считаю, что это распространяется на мантиссу.