保留Double值的格式 – Java

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

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

更新
好的,从您的发布,我知道您正在尝试填充数字格式的单元格只打印或显示两个小数位。 您知道默认情况下,所有数字字段都被解释为省略尾随零。 为了满足您的要求,您可能需要在上下文Cell对象上使用CellFormat和/或DataFormatter ,但是当表示Format ,它又是一个String

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

 DataFormatter dataFormatter = new DataFormatter(); dataFormatter.setDefaultNumberFormat( instanceOfDesiredDecimalFormat ); // or // dataFormatter.setExcelStyleRoundingMode( instanceOfDesiredDecimalFormat ); // apply this format on the cell you want dataFormatter.formatCellValue( instanceOfNumericCellInContext ); 

实际上,您在所描述的代码的大部分内容中都没有做任何事情。 你也可以只返回Double.parseDouble(inputString)。 双打以二进制格式存储,并且leadin /尾随零没有意义。 也许BigDecimal类适合你。

看来我们陷入了僵局。 正如Mario指出的那样,双打被管理为二进制,并且没有办法将二进制格式化为double ,除了将它转换为带有DecimalFormat的字符串,它不再是double。 我向老板解释了这一点,并且他对采取原始双重的解决方案没问题,所以我正在关闭这个问题。 感谢大家的帮助和支持。

问候,迈克