моя проблема в 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
Тем не менее, ваш код в любом случае не имеет смысла. Вы объявляете эти три переменные и инициализируете h
в 0
, а затем проверяете, является ли это 1
. Очевидно, что это не так, поэтому вы всегда будете идти прямо к блоку Else
, и в этом случае вы точно ничего не присвоили snum
, так какой смысл проверять его значение?
@jmcilhinney Я работаю над программой по перемещению двигателей. и код, который я написал, является одной из вещей, которые я делаю в программе. почему я проверяю, если snum = ""
?? потому что значение snum
- это координаты одного из двигателей, и это двигатель оси Z. а координаты пишутся в TextBox. я взял координаты двигателя оси Z из текстового поля и поместил их в переменную snum
. затем я проверяю, пуста ли переменная ``snum` по этому коду if snum == ""
. если snum
пусто, то двигатель оси Z не будет двигаться. и если snum
не пусто и даже если его значение равно 0
, двигатель оси Z будет двигаться.
@jmcilhinney Я отредактировал вопрос и лучше объяснил свою проблему
Вам нужно вернуться к основам программирования. Это курсовая работа 101 уровня. snum
объявлен как числовой тип double. Значение ""
представляет собой строку: текстовый тип. Если нет смысла их сравнивать. Компьютеры не переключаются между числами и текстом так легко, как люди. Включите Option Strict
, и вы начнете получать ошибки компилятора, которые помогут вам убрать этот беспорядок. Кроме того, Мохаммед был лжецом.
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 будет двигаться.
Я отредактировал вопрос и лучше объяснил свою проблему.
В вашем коде по-прежнему мало смысла, но я отвечу в более общем смысле о типах значений. 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
Как может
Double
быть равным пустомуString
? Переменная типаDouble
ВСЕГДА имеет значение, как и все типы значений. Если вы не назначите значение, оно будет использоваться по умолчанию, то есть0.0
. Если вы хотите иметь возможность фактически не представлять никакого значения, вам нужно использовать значение, допускающее значение NULL, то естьNullable(Of Double)
илиDouble?
для краткости. Прежде чем использовать типы значений, допускающие значение NULL, следует немного почитать.