2

我正在使用 Poi 在 Java 中创建 Excel 工作簿。我的原始数据以字符串形式出现。我需要格式化数据以在写入数字的单元格中输入两位小数。我使用Double.parseDouble()将字符串转换为数字,然后使用DecimalFormat将数字格式化为字符串。再次调用Double.parseDouble()将值返回为数字(它所在的单元格是格式化的数字,所以我不能使用字符串值),我应该很好。问题是,对Double.parseDouble()的第二次调用会截断小数点右侧的任何尾随零。任何人都知道我如何强制这个值读取为 1.50 而不是 1.5?

4

3 回答 3

3

I always want two decimals.

解决方案:始终应用特定的十进制格式模式。

示例代码片段

//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 ) );

更新
好的,从您的帖子中,我了解到您试图填充数字格式的单元格只是为了打印或显示两位小数。您知道默认情况下所有数字字段都被解释为省略尾随零。为了达到您的要求,您可能需要在上下文对象上使用CellFormat和/或,但是当说 时,它又是一个。 DataFormatterCellFormatString

我没有尝试以下代码,但可能会对您有所帮助。

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

// apply this format on the cell you want
dataFormatter.formatCellValue( instanceOfNumericCellInContext );  
于 2012-05-03T18:38:58.293 回答
1

在您描述的大部分代码中,您实际上什么也没做。您不妨只返回 Double.parseDouble(inputString)。双打以二进制格式存储,前导/尾随零没有意义。也许BigDecimal类适合您。

于 2012-05-03T18:06:46.817 回答
0

看来我们陷入了僵局。正如马里奥指出的那样,双精度是作为二进制管理的,没有办法将二进制格式化为双精度,除了将其转换为具有 DecimalFormat 的字符串,它不再是双精度。我向我的老板解释了这一点,他同意采用原始双倍的解决方案,所以我要关闭这个问题。感谢大家的帮助和支持。

问候,迈克

于 2012-05-04T18:47:59.263 回答