2

セルの値を適切な値に設定しようとしていfloatます。セルの値を に設定したいのです5.2が、代わりに取得5.1999998093します。これに対する解決策は何ですか?

Workbook workbook = new HSSFWorkbook();
Sheet worksheet = workbook.createSheet();
CellStyle style = workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.0"));

int i = 0;
worksheet.createRow(i + 1);
worksheet.getRow(i + 1).createCell(0).setCellStyle(style);
worksheet.getRow(i + 1).getCell(0).setCellValue(new BigDecimal("5.2").floatValue());
4

4 に答える 4

3

を使用して目的の値の精度を自発的に制限する理由はありませんfloatBigDecimal必要なのがfloat.

5.2は 2 進数で正確に表すことができないためfloat、真の「5.2」値に最も近いのは5.19999980926513です。セルを数値にする必要がある場合は、doubleより精度の高い a を使用できます。さらに、setCellValueメソッドはdoubleではなくを受け取るようにオーバーロードされていfloatます。

問題の行:

worksheet.getRow(i + 1).getCell(0).setCellValue(new BigDecimal("5.2").floatValue());

...もっと簡単なものに置き換えることができます:

worksheet.getRow(i + 1).getCell(0).setCellValue(5.2);

このdouble値は、float リテラルまたは から取得する値5.2よりも、「真の」5.2 値にはるかに近くなります。Excel、実際のセル、および実際のセル値を示すバーに表示されます。データ形式を設定する必要さえありません。float5.2f5.2fnew BigDecimal("5.2").floatValue()5.2

を使用する必要がある場合、おそらくBigDecimal別の場所BigDecimalからnew BigDecimal("5.2")doubleValue()double

worksheet.getRow(i + 1).getCell(0).setCellValue(new BigDecimal("5.2").doubleValue());
于 2013-10-14T16:44:09.300 に答える
-1

toPlainString()代わりに使用できますfloatValue()

new BigDecimal("5.2").toPlainString()

編集:

new BigDecimal("5.2").setScale(2).floatValue()
于 2013-10-12T10:05:36.627 に答える