2017-08-02 41 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掩碼。