私は合計を計算し、これらをExcelシートに入れて、ColdFusionでPOIライブラリを使用して生成します。 Javaライブラリは型付きバールを期待しているので、私はいつもsetCellValue(JavaCast("float", myVar))
を呼び出します。私は.03
で丸め誤差を認識しました。浮遊するように鋳造した後に典型的に知られている違いよりも大きい。JavaCast float round generous
<cfset s = 601761.66>
<cfoutput>
#s#<br>
#JavaCast("float", s)#<br>
#LSNumberFormat(JavaCast("float", s), ".0000000")#<br><br>
</cfoutput>
- 最初の行が印刷
601761.7
- から
- 第二ラウンド
601761.66
第しかしながらプリント:601761,69
に、私は中に入れた値よりも大きい.03
によって等しい601761,6875000
私が知っているとおり、LSNumberFormat
は文字列を返します。私はそれを単に比較のために呼びました。 POIは浮動小数点値を格納しているようですが、最終的にExcelはLSNumberFormatの値を表示します。
setCellValue
に値を渡すと、私の値に非常に近いので、少なくとも小数点以下の2桁目が正しく丸められますか?
なぜ、NumberFormの代わりに 'LSNumberFormat'を使用しますか?で? –
おそらく、NumberFormatは米国の書式設定ルールのみをサポートしているからです。 – Leigh
この場合、LSNumberformatを使用して3桁以上の10進数を表示します。実際のアプリケーションでは、この関数を使ってドットの代わりにカンマを小数点区切りとして取得します。 –