保留Double值的格式 - Java

时间:2012-05-03 17:58:09

标签: java formatting double

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

3 个答案:

答案 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。我向老板解释了这一点,并且他对采用原始双重的解决方案没问题,所以我正在关闭这个问题。感谢所有人的帮助和支持。

的问候, 麦克