该值无法转换为数字

时间:2011-06-18 11:03:50

标签: coldfusion

收到如下严重错误:该值无法转换为数字。可能是什么问题?因为我试着把这个值写成:

1. <cfset ortalama=trim(val(db_maliyet_temp))+ds_toplam_maliyet>

2. <cfset ortalama=val(db_maliyet_temp)+ds_toplam_maliyet>

3. <cfset ortalama=db_maliyet_temp+ds_toplam_maliyet>

第一个和第二个只是不计算db_maliyet_temp, 并且3给出错误:该值无法转换为数字。

3 个答案:

答案 0 :(得分:1)

  

db_maliyet_temp的值:2.806,71   对于ds_toplam_maliyet:394,22

这些不是有效数字。如果你想要总数,你可以试试这个。

<cfset aryMaliyetNumbers = ListToArray(db_maliyet_temp, ",")>
<cfset aryToplamNumbers = ListToArray(ds_toplam_maliyet, ",")>
<cfset total = ArraySum(aryMaliyetNumbers) + ArraySum(aryToplamNumbers)>

有几种方法可以给这只猫上皮。这至少应该让你前进。在我的CF 7盒子上完美运行!

修改

经过大量评论澄清问题后,我相信这是解决方案。

<cfset db_maliyet_temp = Replace(Replace("2.806,71", ".", ""), ",", ".")>
<cfset ds_toplam_maliyet = Replace(Replace("394,22", ".", ""), ",", ".")>
<cfset total = db_maliyet_temp + ds_toplam_maliyet>

如果你想要没有小数的数字,你可以这样做:

<cfset db_maliyet_temp = Replace(Replace("2.806,71", ".", ""), ",", ".")>
<cfset ds_toplam_maliyet = Replace(Replace("394,22", ".", ""), ",", ".")>
<cfset total = val(db_maliyet_temp + ds_toplam_maliyet)>

重要

你遇到的问题要比CF错误大得多。您需要修复导致您的号码格式不正确的基础问题。

答案 1 :(得分:0)

这应该可以解决问题:

<cfscript>
    function convertToNumber(num){
          return reReplace(reReplace(num,'.','','ALL'),',','.','ALL');
    }
</cfscript>

<cfset ortalama=convertToNumber(db_maliyet_temp)+convertToNumber(ds_toplam_maliyet)>

基本上它只是删除'。'因为这是数学不需要的格式,并用小数替换',',以便可以将其视为数字。只有当你打算处理的所有数字都以这种方式格式化时,这才有效,如果有任何格式如1,200.90那么你将不得不更加花哨。

答案 2 :(得分:0)

您是否尝试过LSParseNumber()函数?:

http://cfquickdocs.com/cf9/#lsparsenumber

或val()函数?:

http://cfquickdocs.com/cf9/#val

此外,在通过客户端验证(如果它来自表单)或服务器端验证进入数据之前清理数据可能更容易。