Как проверить, не имеет ли переменная из типа Double значение. ВБ.NET

моя проблема в VB.NET.

Надеюсь, вы видите мой код. Не весь мой код важен.

важная часть находится во втором условии, если и которое if snum = "".

переменная snum является переменной типа double, и я проверяю, пуста ли эта переменная. я имею в виду, что это не имеет никакого значения.

и когда я запускаю код, программа показывает мне эту ошибку во втором условии if, о котором я вам говорил.

""Дополнительная информация: преобразование строки "" в тип "Double" недопустимо.""

Я работаю над программой по перемещению двигателей. и код, который я написал, является одной из вещей, которые я делаю в программе.

почему я проверяю if snum = "" ??

потому что значение snum - это координаты одного из двигателей, и это двигатель оси Z. а координаты написаны в TextBox.

я взял координаты двигателя оси Z из TextBox и поместил их в переменную snum. затем я проверяю, пуста ли переменная snum по этому коду if snum == "". если snum пусто, то двигатель оси Z не будет двигаться. и если snum не пусто и даже если его значение равно 0, двигатель оси Z будет двигаться.

так как я могу проверить, не имеет ли переменная из типа double значение?

enve, если его значение равно 0, двигатель будет двигаться. я хочу проверить, не имеет ли он никакого значения.

это код. процедура работает по нажатию кнопки

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim snum As Double
        Dim tnum As Double
        Dim h As Integer = 0
        If h = 1 Then
            snum = TextBox1.Text
            tnum = TextBox1.Text
            TextBox3.Text = snum
            TextBox4.Text = tnum
        Else
            If snum = "" Then
                snum = tnum
                TextBox2.Text = "Hello , How Are You"
                TextBox3.Text = snum
                TextBox4.Text = tnum
            End If
        End If

    End Sub

Как может Double быть равным пустому String? Переменная типа Double ВСЕГДА имеет значение, как и все типы значений. Если вы не назначите значение, оно будет использоваться по умолчанию, то есть 0.0. Если вы хотите иметь возможность фактически не представлять никакого значения, вам нужно использовать значение, допускающее значение NULL, то есть Nullable(Of Double) или Double? для краткости. Прежде чем использовать типы значений, допускающие значение NULL, следует немного почитать.

jmcilhinney 04.02.2023 10:05

Тем не менее, ваш код в любом случае не имеет смысла. Вы объявляете эти три переменные и инициализируете h в 0, а затем проверяете, является ли это 1. Очевидно, что это не так, поэтому вы всегда будете идти прямо к блоку Else, и в этом случае вы точно ничего не присвоили snum, так какой смысл проверять его значение?

jmcilhinney 04.02.2023 10:07

@jmcilhinney Я работаю над программой по перемещению двигателей. и код, который я написал, является одной из вещей, которые я делаю в программе. почему я проверяю, если snum = "" ?? потому что значение snum - это координаты одного из двигателей, и это двигатель оси Z. а координаты пишутся в TextBox. я взял координаты двигателя оси Z из текстового поля и поместил их в переменную snum. затем я проверяю, пуста ли переменная ``snum` по этому коду if snum == "". если snum пусто, то двигатель оси Z не будет двигаться. и если snum не пусто и даже если его значение равно 0, двигатель оси Z будет двигаться.

MohammedAnas MohammedFuad 05.02.2023 21:41

@jmcilhinney Я отредактировал вопрос и лучше объяснил свою проблему

MohammedAnas MohammedFuad 05.02.2023 22:11

Вам нужно вернуться к основам программирования. Это курсовая работа 101 уровня. snum объявлен как числовой тип double. Значение "" представляет собой строку: текстовый тип. Если нет смысла их сравнивать. Компьютеры не переключаются между числами и текстом так легко, как люди. Включите Option Strict, и вы начнете получать ошибки компилятора, которые помогут вам убрать этот беспорядок. Кроме того, Мохаммед был лжецом.

Joel Coehoorn 06.02.2023 01:39
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
1
5
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Jmcilhinney прав: от этого кода мало толку. Однако вот как преобразовать текстовые переменные в двойные и наоборот с помощью CDBL() и Tostring:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim snum As Double
    Dim tnum As Double
    Dim h As Integer = 0
    If h = 1 Then
        snum = cDbl(TextBox1.Text)
        tnum = cDbl(TextBox1.Text)
        TextBox3.Text = snum.toString
        TextBox4.Text = tnum.toString
    Else
        If snum = 0 Then
            snum = tnum
            TextBox2.Text = "Hello , How Are You"
            TextBox3.Text = snum.toString
            TextBox4.Text = tnum.toString
        End If
    End If

End Sub

я не хочу проверять, если snum == 0. почему я проверяю, если snum = "" ?? потому что значение snum - это координаты одного из двигателей, и это двигатель оси Z. а координаты написаны в TextBox. я взял координаты двигателя оси Z из TextBox и поместил их в переменную snum. затем я проверяю, пуста ли переменная snum по этому коду if snum == "". если snum пусто, то двигатель оси Z не будет двигаться. и если snum не пусто и даже если его значение равно 0, двигатель оси Z будет двигаться.

MohammedAnas MohammedFuad 05.02.2023 21:45

Я отредактировал вопрос и лучше объяснил свою проблему.

MohammedAnas MohammedFuad 05.02.2023 22:44
Ответ принят как подходящий

В вашем коде по-прежнему мало смысла, но я отвечу в более общем смысле о типах значений. Double — это тип значения, поэтому ВСЕГДА имеет значение. Когда вы объявляете переменную, под капотом память, выделенная для этой переменной, по умолчанию будет содержать все нули, и это представлено Nothing в VB. Что это на самом деле означает, зависит от типа. Для всех ссылочных типов (т. е. классов) он не представляет объекта. Для всех типов значений (т. е. структур) он представляет значение по умолчанию для этого типа, например. False для логических значений, #1/01/0001# для Date и ноль для всех числовых типов. Это означает, что в вашем случае ваши переменные Double будут иметь значение 0.0.

Если вы хотите иметь возможность не представлять значение для типа значения, вам нужно использовать типы значений, допускающие значение NULL, например. Nullable(Of Double) или Double? для краткости. Вы можете проверить свойство HasValue типа значения, допускающего значение NULL, чтобы узнать, имеет ли оно значение, и, если да, получить это значение из свойства Value. Для Nullable(Of T)/T? свойство Value будет иметь тип T. Обратите внимание, что получение свойства Value, когда HasValue равно False, вызовет исключение.

Dim d1 As Double?
Dim d2 As Double?

If d1.HasValue Then
    Console.WriteLine("d1 = " & d1.Value)
Else
    Console.WriteLine("d1 has no value")
End If

If d2.HasValue Then
    Console.WriteLine("d2 = " & d2.Value)
Else
    Console.WriteLine("d2 has no value")
End If

d1 = 0.0
d2 = 123.456

If d1.HasValue Then
    Console.WriteLine("d1 = " & d1.Value)
Else
    Console.WriteLine("d1 has no value")
End If

If d2.HasValue Then
    Console.WriteLine("d2 = " & d2.Value)
Else
    Console.WriteLine("d2 has no value")
End If

Другие вопросы по теме