Можно ли отформатировать Double без экспоненциальной записи?

Я знаю о различных сообщениях, плавающих там по той же проблеме.

У меня он немного другой и может быть немного очевидным, но мне понадобятся ваши комментарии.

В настоящее время я использую Hibernate Search и Lucene для индексирования свойств объектов.

У меня есть набор свойств Double для моих сущностей.

Эти объекты, использующие мосты по умолчанию из Lucene (Bridge, т.е. тот, кто отвечает за преобразование LongToString и StringToLong), доставляют мне проблемы, как только начинается экспоненциальное представление. использоваться.

Я пытаюсь показать в DataTables в .xhtml суммы кредита и дебета, их длина может достигать 18 цифр, а их база данных (DB2 em>) имеет тип BIGINT.

  1. Например, я не могу изменить тип базы данных на Long.
  2. Я не могу изменить ни атрибуты типа Double моих сущностей, ни, например, Long

Итак, в чем вопрос? Есть ли способ из строки сказать "1234567890" для получения Double формата 1234567890, а не 1.23456789E9, как это делается по умолчанию Double.parseDouble(FormattedString)?

PD: я знаю о существовании DecimalFormat, однако примите во внимание, что использование этого форматера даст мне правильно отформатированную строку: "#######.E0", но то, что мне действительно нужно является Double с таким форматом, однако при выполнении Double.parseDouble(FormattedString) я потеряю такой формат.

Надеюсь, я был ясен, и спасибо за любую помощь.


person camiloqp    schedule 16.02.2011    source источник
comment
Привести его задолго до печати?   -  person aioobe    schedule 16.02.2011
comment
Разве это не выполняется динамически на итерации над ‹p:DataTable›   -  person camiloqp    schedule 16.02.2011


Ответы (3)


Есть ли способ из строки, скажем, "1234567890", получить значение Double со значением 1234567890, а не 1.23456789E9, как это делается по умолчанию Double.parseDouble(FormattedString)?

Ваш вопрос не имеет особого смысла. 1234567890 — это то же значение, что и 1.23456789E9, и двойное число представляет одно из них тогда и только тогда, когда оно также представляет другое.

Мне известно о существовании DecimalFormat, однако примите во внимание, что использование этого средства форматирования даст мне правильно отформатированную строку: "#######.E0", но мне действительно нужен Double с таким форматом , однако при выполнении Double.parseDouble(FormatedString) я потеряю такой формат.

Нет, невозможно создать Double так, чтобы он отображался определенным образом. Метод toString для Double это то, что есть, и это нельзя изменить.

Единственное, что вы можете сделать, это, например, использовать DecimalFormat или String.format, но, как вы заметили, вы всегда получите String.

person aioobe    schedule 16.02.2011
comment
Надеюсь, вы имели в виду parseDouble вместо toString? Так что вы на самом деле имеете в виду, что parseDouble это то, что есть, и его нельзя изменить?? - person camiloqp; 16.02.2011
comment
Да, плохо, я думал, что можно каким-то образом изменить формат двойного числа, но это невозможно, как вы утверждаете. Решение, предоставленное коллегой, состояло в том, чтобы применить свойство formatter к <h:outputText> в моем .xhtml. Кроме того, я отредактировал первую часть вопроса, чтобы сделать его более ясным. Не могли бы вы подтвердить, что свойство типа Double не может изменить свой формат? - person camiloqp; 16.02.2011
comment
Вы не можете изменить формат double по умолчанию, однако вы можете написать свой собственный код для создания String из double или double из String любым удобным для вас способом. - person Peter Lawrey; 16.02.2011

Ничего не знаю о Lucene, но у вас никогда не может быть двойника в документе .xhtml, это всегда строка символов. У Double нет формата, есть только строковое представление Double.

person Jens Schauder    schedule 16.02.2011
comment
Вы правы, я забыл упомянуть, как показываются эти двойники. У меня есть ‹p:DataTable›, перебирающий список сущностей, у которых есть различные свойства, свойства типа Double, о которых я упоминаю здесь. Поэтому не обращайте внимания на часть .xhtml и проверьте мой реальный вопрос Итак, в чем вопрос Спасибо. - person camiloqp; 16.02.2011

Итак, наконец-то я нашел решение своей проблемы. Обобщив слова aioobe и Йенса Шаудера. Я могу динамически форматировать текст на моем .xhtml со следующим тегом:

<h:outputText value="#{recordTable[column.property]}"
              rendered="#{column.header ne 'Details' and
                          column.header eq ('Total Credit Amount' or
                                            'Total Debit Amount')}">
              <f:convertNumber pattern="########"/>
</h:outputText>

Спасибо, что разъяснили мне эти основные вещи, которые я размыл :)

person camiloqp    schedule 16.02.2011