【问题标题】:abs not working on lucee coldfusionabs 在 lucee Coldfusion 上不起作用
【发布时间】:2017-08-02 14:32:33
【问题描述】:

我使用下面的格式来格式化计算百分比增加或减少后得到的数字,这意味着这个数字可以是正数或负数。以下在 Coldfusion 上运行良好,但在 Lucee 上会引发错误 - 无法将 [- 6.50] 字符串转换为数字值。知道如何解决这个问题。

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

【问题讨论】:

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

标签: coldfusion lucee


【解决方案1】:

你应该可以使用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>

【讨论】:

  • 以上似乎并不适用于所有场景,它适用于一些而不是其他负数,不知道为什么
  • 无法将 [- 6.50] 字符串转换为数值
  • 你确定有 javacast 吗?我从未见过 javaCast 无法转换为类型而不会在转换本身上引发错误。
  • 是的,它在页面上
  • 还有其他可能导致该错误的原因吗?基本上,试图格式化一个负数 -6.50,它是一个数字字符串
【解决方案2】:

首先,删除所有空格。无论如何,最好先测试输入参数是否为数字。

<!--- 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】:

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

    问题是您的格式掩码“99.99”意味着返回一个小数点前有两个字符的格式化数字,您返回的字符串值是“- 6.50”,带有额外的空格。尝试对“9.99”或“09.99”的数字格式使用掩码

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      相关资源
      最近更新 更多