私は奇妙な状況に出くわしました。なぜコードの下に0が返されないのですか?代わりに、それは非常に小さな負の数を返しています。コード上
<cfset x = 5448.10-3311.23-2136.87>
<cfoutput>x=#x#</cfoutput>
が出力:X = 4.54747350886E-013
私は同じ結果とCF9及びCF10の両方でコード上に走りました。
ご協力いただきまして誠にありがとうございます。
私は奇妙な状況に出くわしました。なぜコードの下に0が返されないのですか?代わりに、それは非常に小さな負の数を返しています。コード上
<cfset x = 5448.10-3311.23-2136.87>
<cfoutput>x=#x#</cfoutput>
が出力:X = 4.54747350886E-013
私は同じ結果とCF9及びCF10の両方でコード上に走りました。
ご協力いただきまして誠にありがとうございます。
<cfset x = PrecisionEvaluate(5448.10-3311.23-2136.87)>
<cfoutput>x=#x#</cfoutput>
ドク:http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fd9.html
他の人は浮動小数点精度に関連していると述べています。私はちょうどあなたがマスクを与えられたとき
<cfset x1 = 5448.19-3311.23-2136.87 />
<cfset x2 = numberformat(x1, "9.99") />
<cfoutput>x1=#x1#<br />x2=#x2#</cfoutput>
結果
x1=0.0899999999997
x2=0.09
はのNumberFormat関数は、指定された小数点以下の桁数に数値を丸めます合理的な結果を取得しようとしている場合は、解像度を指摘したかったです。 PrecisionEvaluate()
ため
が、それは倍精度を使用していますか? –
http://ja.wikipedia.org/wiki/Floating_point#Accuracy_problems –
@RiverC - +1。あなたが疑うように、はい。あなたがCFに精通していない場合は、ほとんどタイプレスですが、Javaの上に構築されています。算術演算子を使用する場合、数値は暗黙的に 'java.lang.Double'に変換されます。 – Leigh