Poiを使用してJavaでExcelワークブックを作成しています。私の生データは文字列として届きます。数値が書き込まれているセルに小数点以下2桁を入力するように、データをフォーマットする必要があります。Double.parseDouble()を使用して文字列を数値に変換してから、DecimalFormatを使用して数値を文字列としてフォーマットします。Double.parseDouble()をもう一度呼び出して、値を数値に戻します(セルは数値でフォーマットされているため、文字列値を使用できません)。問題は、Double.parseDouble()への2回目の呼び出しで、小数点の右側から末尾のゼロが切り捨てられることです。この値を、たとえば1.5ではなく1.50として読み取るように強制する方法について、誰かが考えていますか?
3 に答える
I always want two decimals.
解決策:常に特定の10進形式のパターンを適用してください。
サンプルコードスニペット:
//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 ) );
更新:
わかりました。あなたの投稿から、数値形式のセルを入力して、小数点以下2桁で印刷または表示することのみを試みていることを理解しています。デフォルトでは、すべての数値フィールドは末尾のゼロを省略して解釈されます。要件を達成するために、コンテキストオブジェクトを使用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 );
説明したコードのほとんどの部分で、実際には何もしていません。Double.parseDouble(inputString)を返すだけでもかまいません。ダブルスはバイナリ形式で保存され、先頭/末尾のゼロは意味がありません。おそらくBigDecimalクラスはあなたのためのものです。
行き詰まっているようです。マリオが指摘したように、doubleはバイナリとして管理され、doubleではなくなったDecimalFormatを使用して文字列に変換する以外に、バイナリをdoubleとしてフォーマットする方法はありません。私はこれを上司に説明しました、そして彼は生のダブルを取るという解決策で大丈夫なので、私はこの問題を閉じます。あなたの助けとサポートに感謝します。
よろしく、マイク