Member 12919944 Ответов: 3

Как заменить nan на 0 вместо VB asp.


привет, ребята, я пытаюсь сделать здесь расчет . но когда я ввожу 0, его значения равны Nan ? как заменить его на 0 вместо этого.

Что я уже пробовал:

totalms = Val(wwms1.Text) + Val(wwms2.Text) + Val(wwms3.Text) + Val(wwms4.Text) + Val(wwms5.Text) + Val(wwms6.Text) + Val(wwms7.Text) + Val(wwms8.Text) + Val(wwms9.Text) + Val(wwms10.Text)
            totalrs = Val(wwrs1.Text) + Val(wwrs2.Text) + Val(wwrs3.Text) + Val(wwrs4.Text) + Val(wwrs5.Text) + Val(wwrs6.Text) + Val(wwrs7.Text) + Val(wwrs8.Text) + Val(wwrs9.Text) + Val(wwrs10.Text)

3 Ответов

Рейтинг:
2

Ralf Meier

Если вход в Ваш контроль (wvms.. и wvrs.. являются ли текстовые поля?) не имеет конвертируемого числового значения, вы не можете получить числовое значение. В этом случае вы должны проверить, является ли вход допустимым - для каждого элемента управления sepearte.


CPallini

5.

Ralf Meier

Спасибо за Ваш голос , но мой ответ говорит почти то же самое, что и ваш ...

Maciej Los

5ед!

Ralf Meier

@Мачей:
Я бы сказал: Спасибо за Ваш голос ... но у меня нет права голоса от вас. Есть еще только голосование Карлоса по моему ответу ...
Но... Желаю вам счастливого Нового года ...

Maciej Los

Ну, я снова проголосовал. Надеюсь, это поможет.
С Новым годом и вас!

Ralf Meier

Затем... теперь спасибо ...

Рейтинг:
2

Maciej Los

Ну, используя Функция Val[^] это действительно плохая практика. Пожалуйста, перейдите по ссылке, чтобы узнать почему.

Я бы предложил использовать правильный способ преобразования текста в числа. Например:
ГЛ.:
CDbl(), CLng(), и т. д., см.: Функции Преобразования Типов[^]
VB.NET:
Двойной.Метод TryParse (String, NumberStyles, IFormatProvider, Double) (System)[^]
Двойной.Метод Синтаксического Анализа (String) (System)[^]

В псевдокоде:


Dim tot As Double, tmp As Double

On Error GoTo Err_Txt2Dbl

For Each obj As TextBox In Form1.Controls
    If obj.Name Like "wwms*" Then
        tmp = 0
        'if conversion is possible, calculate total
        tmp = CDbl(obj.Text)
        tot += tmp
    End If
Next

Exit_MySubroutine:
    Exit Sub

Err_Txt2Dbl:
    Select Case Err.Number
        Case 6 'overflow
            tmp = 0
            Resume Next
    End Select


Dim st As NumberStyles = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
Dim ci As CultureInfo = CultureInfo.CreateSpecificCulture("en-us")
Dim tot As Double = 0
Dim tmp As Double = 0
For Each obj As TextBox In Form1.Controls
    If obj.Name.StartsWith("wwms") Then
        tmp = 0
        'if conversion is possible, calculate total
        If Double.TryParse(control.Text, st, ci, tmp) Then
            tot += tmp
        End If
    End If
Next



Для получения более подробной информации, пожалуйста, смотрите:
On Error Statement (Visual Basic)[^]
Обработка ошибок в Visual Basic .NET[^]


CPallini

5.

Maciej Los

Спасибо, Карло.

Ralf Meier

+5

Maciej Los

Спасибо, Ральф.

Рейтинг:
1

CPallini

Используйте Двойной.IsNan[^] метод.
Пожалуйста, обратите внимание, что вы должны проверить причина такого результата, вместо того чтобы слепо заменить его на 0.


Maciej Los

5ед!

Ralf Meier

+5