将十进制值与 evaluate 进行比较
Compare decimal values with evaluate
我的问题很简单。对于所有问题,以下代码应 return 为真。但是问题 4 及以上 return 错误,我的问题是为什么?
1. <cfif #Evaluate("2 - 1.52")# eq "0.48">true<Cfelse>false</cfif><br>
2. <cfif #Evaluate("3 - 2.52")# eq "0.48">true<Cfelse>false</cfif><br>
3. <cfif #Evaluate("4 - 3.52")# eq "0.48">true<Cfelse>false</cfif><br>
4. <cfif #Evaluate("5 - 4.52")# eq "0.48">true<Cfelse>false</cfif><br>
5. <cfif #Evaluate("6 - 5.52")# eq "0.48">true<Cfelse>false</cfif><br>
6. <cfif #javacast("double",Evaluate("6 - 5.52"))# eq "#javacast("double",0.48)#">true<Cfelse>false</cfif><br>
7. <cfif compare(javacast("double",Evaluate("6 - 5.52")),javacast("double",0.48))>true<Cfelse>false</cfif><br>
首先我运行你的代码
1. <cfif #Evaluate("2 - 1.52")# eq "0.48">true<Cfelse>false</cfif><br>
2. <cfif #Evaluate("3 - 2.52")# eq "0.48">true<Cfelse>false</cfif><br>
3. <cfif #Evaluate("4 - 3.52")# eq "0.48">true<Cfelse>false</cfif><br>
4. <cfif #Evaluate("5 - 4.52")# eq "0.48">true<Cfelse>false</cfif><br>
5. <cfif #Evaluate("6 - 5.52")# eq "0.48">true<Cfelse>false</cfif><br>
然后我 运行d 它没有字符串比较
1. <cfif Evaluate("2 - 1.52") eq 0.48>true<Cfelse>false</cfif><br>
2. <cfif Evaluate("3 - 2.52") eq 0.48>true<Cfelse>false</cfif><br>
3. <cfif Evaluate("4 - 3.52") eq 0.48>true<Cfelse>false</cfif><br>
4. <cfif Evaluate("5 - 4.52") eq 0.48>true<Cfelse>false</cfif><br>
5. <cfif Evaluate("6 - 5.52") eq 0.48>true<Cfelse>false</cfif><br>
我得到了
接下来我只是<cfoutput>
编辑了有价值的
<cfoutput>
1. #Evaluate("2 - 1.52")#<br>
2. #Evaluate("3 - 2.52")#<br>
3. #Evaluate("4 - 3.52")#<br>
4. #Evaluate("5 - 4.52")#<br>
5. #Evaluate("6 - 5.52")#<br>
</cfoutput>
乍一看都一样
但考虑一下
<cfoutput>
1. #(2 - 1.52 - 0.48)#<br>
2. #(3 - 2.52 - 0.48)#<br>
3. #(4 - 3.52 - 0.48)#<br>
4. #(5 - 4.52 - 0.48)#<br>
5. #(6 - 5.52 - 0.48)#<br>
</cfoutput>
您基本上遇到了舍入问题。 ...E-016 左边很多位
我如何处理这些
如果 ColdFusion 变量是一个数字,那么任何东西都可以将它变成一个浮点数。您使用的是小数,这就是它成为浮点数的原因。浮点数(几乎)总是近似值。因此,您不能在没有像这样的副作用的情况下进行直接比较。
如果您真的必须进行这样的比较,乘以 100(一个整数),然后将值转换为整数,您应该处于更好的状态。
加时赛的种类
有时间与 Square 的电子商务部门合作 API。所有的钱都是以分来衡量的。习惯需要一段时间,但他们这样做是为了避免这样的问题。
根据 Ageax 建议更新
考虑一下
#Evaluate("5 - 4.52").toString()#
#PrecisionEvaluate(5 - 4.52).toString()#
结果为
我的问题很简单。对于所有问题,以下代码应 return 为真。但是问题 4 及以上 return 错误,我的问题是为什么?
1. <cfif #Evaluate("2 - 1.52")# eq "0.48">true<Cfelse>false</cfif><br>
2. <cfif #Evaluate("3 - 2.52")# eq "0.48">true<Cfelse>false</cfif><br>
3. <cfif #Evaluate("4 - 3.52")# eq "0.48">true<Cfelse>false</cfif><br>
4. <cfif #Evaluate("5 - 4.52")# eq "0.48">true<Cfelse>false</cfif><br>
5. <cfif #Evaluate("6 - 5.52")# eq "0.48">true<Cfelse>false</cfif><br>
6. <cfif #javacast("double",Evaluate("6 - 5.52"))# eq "#javacast("double",0.48)#">true<Cfelse>false</cfif><br>
7. <cfif compare(javacast("double",Evaluate("6 - 5.52")),javacast("double",0.48))>true<Cfelse>false</cfif><br>
首先我运行你的代码
1. <cfif #Evaluate("2 - 1.52")# eq "0.48">true<Cfelse>false</cfif><br>
2. <cfif #Evaluate("3 - 2.52")# eq "0.48">true<Cfelse>false</cfif><br>
3. <cfif #Evaluate("4 - 3.52")# eq "0.48">true<Cfelse>false</cfif><br>
4. <cfif #Evaluate("5 - 4.52")# eq "0.48">true<Cfelse>false</cfif><br>
5. <cfif #Evaluate("6 - 5.52")# eq "0.48">true<Cfelse>false</cfif><br>
然后我 运行d 它没有字符串比较
1. <cfif Evaluate("2 - 1.52") eq 0.48>true<Cfelse>false</cfif><br>
2. <cfif Evaluate("3 - 2.52") eq 0.48>true<Cfelse>false</cfif><br>
3. <cfif Evaluate("4 - 3.52") eq 0.48>true<Cfelse>false</cfif><br>
4. <cfif Evaluate("5 - 4.52") eq 0.48>true<Cfelse>false</cfif><br>
5. <cfif Evaluate("6 - 5.52") eq 0.48>true<Cfelse>false</cfif><br>
我得到了
接下来我只是<cfoutput>
编辑了有价值的
<cfoutput>
1. #Evaluate("2 - 1.52")#<br>
2. #Evaluate("3 - 2.52")#<br>
3. #Evaluate("4 - 3.52")#<br>
4. #Evaluate("5 - 4.52")#<br>
5. #Evaluate("6 - 5.52")#<br>
</cfoutput>
乍一看都一样
但考虑一下
<cfoutput>
1. #(2 - 1.52 - 0.48)#<br>
2. #(3 - 2.52 - 0.48)#<br>
3. #(4 - 3.52 - 0.48)#<br>
4. #(5 - 4.52 - 0.48)#<br>
5. #(6 - 5.52 - 0.48)#<br>
</cfoutput>
您基本上遇到了舍入问题。 ...E-016 左边很多位
我如何处理这些 如果 ColdFusion 变量是一个数字,那么任何东西都可以将它变成一个浮点数。您使用的是小数,这就是它成为浮点数的原因。浮点数(几乎)总是近似值。因此,您不能在没有像这样的副作用的情况下进行直接比较。
如果您真的必须进行这样的比较,乘以 100(一个整数),然后将值转换为整数,您应该处于更好的状态。
加时赛的种类
有时间与 Square 的电子商务部门合作 API。所有的钱都是以分来衡量的。习惯需要一段时间,但他们这样做是为了避免这样的问题。
根据 Ageax 建议更新
考虑一下
#Evaluate("5 - 4.52").toString()#
#PrecisionEvaluate(5 - 4.52).toString()#
结果为