2017-08-02 79 views
1

我正在使用下面的格式来计算增加或减少百分比后得到的数字,这意味着此数字可以是正数或负数。下面在Coldfusion上工作得很好,但在Lucee上它会抛出一个错误 - 无法将[ - 6.50]字符串转换为数字值。任何想法如何解决这个问题。abs lucee coldfusion

<cfif money_deposit lt 0> 
    <cfset testVar = abs(NumberFormat(money_deposit,'99.99'))> 
<cfelse> 
    <cfset testVar = NumberFormat(money_deposit,'99.99')> 
</cfif> 
+0

如果money_forecast是数字,请尝试切换numberFormat和abs函数。 –

+0

它不是数字 – user747291

回答

1

首先,删除任何空的空间。在任何情况下,首先测试输入参数是否是数字是一个好习惯。

<!--- Remove any spaces ---> 
<cfset money_deposit = REreplace(money_deposit,"\s","","all")> 
<cfif isNumeric(money_deposit)> 
    <cfif money_deposit lt 0> 
     <cfset testVar = abs(NumberFormat(money_deposit,'-99.99'))> 
    <cfelse> 
     <cfset testVar = NumberFormat(money_deposit,'99.99')> 
    </cfif> 
</cfif> 
3

您应该能够使用javaCast

<cfif money_deposit lt 0> 
    <cfset testVar = abs(NumberFormat(javaCast("float", money_deposit),'99.99'))> 
<cfelse> 
    <cfset testVar = NumberFormat(money_deposit,'99.99')> 
</cfif> 
+0

上面似乎没有适用于所有情况,它正在处理一些而不是其他其他负数不知道为什么 – user747291

+0

你得到什么错误? –

+0

无法将[ - 6.50]字符串转换为数字值 – user747291

0

数字格式返回一个字符串 http://docs.lucee.org/reference/functions/numberformat.html

的问题是你的格式化掩码“99.99”是指两个字符小数点前返回格式的数字,你得到的回复是字符串值“ - 6.50“,有额外的空间。尝试使用“9.99”或“09.99”的numberformat掩码。