ColdFusionのDecimalFormat()関数でこれはどうなっていますか?正しい結果を得るにはどうすればよいですか?
-
07-07-2019 - |
質問
<cfset number1 = 20.5/80 * 100 />
<cfset number2 = 18.125 />
<cfset number3 = 6.875 />
<cfoutput>
DecimalFormat(#number1#): #DecimalFormat(number1)#<br />
DecimalFormat(#number2#): #DecimalFormat(number2)#<br />
DecimalFormat(#number3#): #DecimalFormat(number3)#
</cfoutput>
出力:
DecimalFormat(25.625):25.62
DecimalFormat(18.125):18.13
DecimalFormat(6.875):6.88
出力以外:
DecimalFormat(25.625):25.63
DecimalFormat(18.125):18.13
DecimalFormat(6.875):6.88
数学的計算の結果である変数により、DecimalFormat()の動作が異なるようです。 Javaを掘ることなく、簡単に修正できますか?
解決
問題は DecimalFormat()
ではなく、典型的な浮動小数点の丸めエラーだと思います。
他のヒント
DecimalFormatはフォーマット関数です。数学関数ではありません。その仕事はあなたのためにあなたの数を丸めることではありません、残念ながらCFには小数のための良い数学関数が欠けているので、あなたはあなた自身を書かなければなりません。
round()のCF livedocsページで誰かが書いたものです:
<cffunction name="roundDecimal" returntype="numeric">
<cfargument name="num" type="numeric" required="yes">
<cfargument name="decimal" type="numeric" default="2" required="no">
<cfreturn round(num*10^decimal)/10^decimal />
</cffunction>
簡単な解決策は、行1を number1 = NumberFormat(20.5 / 80 * 100、 '9.999')
CFのドキュメントを参照してください NumberFormat を実行し、ラウンドでページ検索を実行して特定の情報を確認します。
所属していません StackOverflow