Вопрос по java – Сохранить форматирование значения Double - Java

2

Я использую Poi для создания книг Excel на Java. Мои необработанные данные поступают в виде строки. Мне нужно отформатировать данные, чтобы ввести два десятичных знака в ячейку, где пишется число. я используюDouble.parseDouble() преобразовать строку в числовое значение, а затем использоватьDecimalFormat отформатировать числовое значение в виде строки. Еще один звонокDouble.parseDouble() чтобы вернуть значение в числовое значение (ячейка, в которой оно находится, отформатировано в числовом формате, так что я не могу использовать строковое значение), и у меня все получится. Проблема в том, что второй вызовDouble.parseDouble() усекает любые конечные нули справа от десятичной точки. Кто-нибудь имеет представление о том, как я могу заставить это значение читать, скажем, 1,50, а не 1,5?

Подождите, значит, вы делаете String - & gt; Double - & gt; Строка - & gt; Удвоить? И это последняя строка - & gt; Вдвойне это меняет форматирование? Вы всегда хотите 2 цифры, или вы хотите сколько угодно строк? Charles
Я всегда хочу два знака после запятой. Если строка имеет значение 1,5, я хочу, чтобы она читалась как 1,50. Mike Preston

Ваш Ответ

3   ответа
1

который вы описали. Вы также можете просто вернуть Double.parseDouble (inputString). Двойники хранятся в двоичном формате, и начальные / конечные нули не имеют смысла. Возможно,BigDecimal класс это что-то для вас.

@MikePreston Боюсь, я не знаю POI, но, конечно, должно быть реальное решение ... Попробуйте спросить на форуме, посвященном POI?
Отличное предложение. Я ограничен в том, что Poi будет принимать только двойное значение в числовом формате поля, но я думаю, что при других обстоятельствах ваш ответ решил бы мою ситуацию. Mike Preston
3

I always want two decimals.

Решение:Always apply specific decimal format pattern.

Sample code snippet:

//java.text.DecimalFormat df = new java.text.DecimalFormat( "###0.00" );  
java.text.DecimalFormat df = new java.text.DecimalFormat();  
df.applyPattern( "###0.00" ); // always two decimals  

double dbl = 1.50d ;  

// prints: dbl =  1.5
System.out.println( "dbl = " + dbl );  

// prints: df.format( 1.5 ) = 1.50
System.out.println ( "df.format( " + dbl + " ) = " + df.format( dbl ) );

UPDATE:
Хорошо, из вашего сообщения я понимаю, что вы пытаетесь заполнить ячейку с числовым форматом только для печати или отображения с двумя десятичными позициями. Вы знаете, что по умолчанию все числовые поля интерпретируются, опуская завершающие нули. Чтобы выполнить ваши требования, вы можете потребовать использоватьCellFormat и / илиDataFormatter на вашем контекстеCell объект, но когда сказалFormat, этоString снова.

Я не пробовал следующий код, но могу вам помочь.

DataFormatter dataFormatter = new DataFormatter();
dataFormatter.setDefaultNumberFormat( instanceOfDesiredDecimalFormat );  
// or  
// dataFormatter.setExcelStyleRoundingMode( instanceOfDesiredDecimalFormat );  

// apply this format on the cell you want
dataFormatter.formatCellValue( instanceOfNumericCellInContext );  
DecimalFormat возвращает строку. Мне нужно вернуть двойной. Вот почему в исходном вопросе мне пришлось дважды использовать Double.parseDouble. Mike Preston
@MikePreston - пожалуйста, проверьте, полезно ли обновление.
0

мы в тупике. Как указал Марио, двойники управляются как двоичные, и нет возможности отформатировать двоичныеas a doubleза исключением преобразования его в строку с десятичным форматом, который больше не является двойным. Я объяснил это своему боссу, и он согласен с решением взять необработанный дубль, поэтому я закрываю эту проблему. Спасибо всем за вашу помощь и поддержку.

С уважением, Майк

Вы можете явно установить существующую ячейку в POI для использования типа String и получить это значение как String вместо числового (double). Оттуда вы можете использовать предложения по форматированию, описанные в других сообщениях.

Похожие вопросы