Значение не может быть преобразовано в число - PullRequest
2 голосов
/ 18 июня 2011

Получена критическая ошибка, например: значение не может быть преобразовано в число.в чем может быть проблема?Так как я пытался записать эти значения, такие как:

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 ]

1 голос
/ 18 июня 2011

значение для 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!

EDIT

После того, как нелепое количество комментариев прояснило вопрос, я считаю, что это решение.

<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. Вам необходимо устранить основную проблему, которая приводит к неправильному форматированию вашего номера.

0 голосов
/ 24 июня 2011

Вы пробовали использовать функцию LSParseNumber ()?:

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

Или функция val ()?:

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

Кроме того, может быть легче очистить данные перед их вводом либо с помощью проверки на стороне клиента (если она поступает из формы), либо проверки на стороне сервера.

0 голосов
/ 18 июня 2011

Это должно сработать:

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

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

В основном это просто удаляет '.' так как это форматирование не нужно для математики и заменяет ',' десятичным, чтобы его можно было рассматривать как число. Это будет работать только в том случае, если ВСЕ числа, с которыми вы собираетесь иметь дело, отформатированы таким образом, если есть какие-либо отформатированные, например, 1200,90, тогда вам придется быть немного более причудливым.

...