我正在使用Poi在Java中创建Excel工作簿。我的原始数据以字符串形式出现。我需要格式化数据,以便在写入数字的单元格中输入两个小数位。我使用 Double.parseDouble()将字符串转换为数字,然后使用 DecimalFormat 将数字格式化为字符串。另一个调用 Double.parseDouble()将值返回到numeric(它所在的单元格格式为数字,所以我不能使用字符串值),我应该很好。问题是,第二次调用 Double.parseDouble()会截断小数点右边的任何尾随零。任何人都知道如何强制将这个值读作1.50而不是1.5?
答案 0 :(得分: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
对象上使用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 );
答案 1 :(得分:1)
在您描述的大部分代码中,您实际上什么都不做。你也可以只返回Double.parseDouble(inputString)。双打以二进制格式存储,并且leadin /尾随零没有意义。也许BigDecimal课程适合你。
答案 2 :(得分:0)
看来我们陷入了僵局。正如Mario指出的那样,双打被管理为二进制,并且没有办法将二进制格式化为双,除了将它转换为带有DecimalFormat的字符串,它不再是double。我向老板解释了这一点,并且他对采用原始双重的解决方案没问题,所以我正在关闭这个问题。感谢所有人的帮助和支持。
的问候, 麦克