La conversión de la cadena "" a tipo 'Double' no es válida.

Resuelto
kikou93 Mensajes publicados 438 Estado Miembro -  
kikou93 Mensajes publicados 438 Estado Miembro -
Hola,
hace tiempo que no hago preguntas (estuve muy ocupada con mis estudios)
uso Visual Basic Express 2010
les explico mi problema y espero que alguien pueda ayudarme
tengo, por ejemplo, la siguiente condición:
If TextBox1.Text > 0 Then
.....
End if
pero muestra el siguiente error:
La conversión de la cadena "" a tipo 'Double' no es válida
intenté con:
If CInt(TextBox.Text) > 0
If Val(TextBox.Text) > 0
funciona, no aparece ningún error
pero el problema es que si TextBox1.Text = 0,009 el valor que se tiene en cuenta es 0 y no 0,009
normalmente la condición se verifica
también probé con:
If CDbl(TextBox.Text) > 0
pero aparece el mismo error (La conversión de la cadena "" a tipo 'Double' no es válida)
por favor ayúdenme y gracias de antemano por su ayuda
--
¡Cómo funciona es genial!
      ¡1000 gracias amigos!

3 respuestas

Usuario anónimo
 
Buenas noches,

Si tu PIC está configurado para que el punto sea el símbolo decimal, entonces 0,009 no es un número, 0.009 sí lo es.

En lugar de Cquelquechose, utiliza la clase Convert, podrás elegir cuál es el modelo de número a utilizar.

--
Cuando era pequeño, el Mar Muerto sólo estaba enfermo.
George Burns
1
Usuario anónimo
 
Dim toto As Double = Convert.ToDouble("0,009", CultureInfo.GetCultureInfo("es-ES"))
0
kikou93 Mensajes publicados 438 Estado Miembro 1
 
gracias por responderme tan rápido
he configurado el textBox de la siguiente manera:
Dim desNúmero() As Char = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Not desNúmero.Contains(e.KeyChar) And Not Asc(e.KeyChar) = 8 Then
e.Handled = True
End If
If e.KeyChar = "."c Or e.KeyChar = ","c Then
e.Handled = True
If Not (TextBox1.Text.Contains(",")) Then TextBox1.AppendText(",")
End If
End Sub
para que el textBox acepte solo los números (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) y la coma
entonces el símbolo decimal es la coma y no el punto
incluso si pulso la tecla del punto, en el textBox se muestra la coma
0
kikou93 Mensajes publicados 438 Estado Miembro 1
 
Dim toto As Double = Convert.ToDouble("0,009", CultureInfo.GetCultureInfo("es-ES"))

no sé si este método funciona, pero no me facilita el trabajo porque la condición que tengo contiene muchas textBox:
If textBox1.text >0 and textBox2.text>0 and textBox3.text>0 .... and textBox30.text>0 then
.........
End if
0
NHenry Mensajes publicados 15235 Fecha de registro   Estado Moderador Última intervención   387
 
Active la opción Strict y la opción Explicit en tu configuración de VB.NET (o en las opciones de tu proyecto) y corrige los errores de conversión que aparezcan.
Además, elimina la importación automática del espacio de nombres "Microsoft.VisualBasic".
0
kikou93 Mensajes publicados 438 Estado Miembro 1
 
si añado Active Option Strict y Option Explicit, eso me genera cientos de errores,
he decidido aplicar el método de Whismeril
gracias por dedicarme tu tiempo, muchas gracias
0
Usuario anónimo
 
Y además de los consejos de NHenry (hola) no uses acentos, ni otro modificador de letra en los nombres de variables o funciones.
Si debes abrir tu proyecto en una computadora en inglés, se va a romper en todas partes.

no sé si este método funciona pero no me facilita el trabajo porque la condición que tengo contiene muchas textBox


te he mostrado el camino, no la solución exacta para tu caso.

Podrías escribir una función que llamarías para cada TextBox, también puedes hacer un método de extensión.

Pero si aplicas exactamente este código, "0.009" no sería aceptado
Tendría esto
 Dim texte as String = "0,009" Dim toto As Double = Convert.ToDouble(texte.Replace(",","."), CultureInfo.GetCultureInfo("fr-FR")) 

Lo que permitiría aceptar "0,009" o "0.009", pero un gran número con separación de miles americana "1,000,000.001" no funcionaría.

Hay un momento en que tendrás que fijar el formato de entrada utilizando la validación por ejemplo
--
Cuando era pequeño, el mar Muerto solo estaba enfermo.
George Burns
1
kikou93 Mensajes publicados 438 Estado Miembro 1
 
Gracias Whismeril he utilizado tu método y lo he aplicado a cada TextBox
aunque es largo, lo esencial es que funciona muy bien y no hay ningún problema
Gracias por tu ayuda, me has ayudado mucho
0
NHenry Mensajes publicados 15235 Fecha de registro   Estado Moderador Última intervención   387
 
¿Entonces con "0.009" pasa o no?

Con .NET, hay un double.Parse que permite aceptar otras culturas que la del sistema para los decimales.

--
Intervengo principalmente en VB6 y VB.NET, con un poco de C#, pero la moderación me lleva a menudo a otros lenguajes.
En VB.NET, recuerden activar "Option Explicit" y "Option Strict".
0
kikou93 Mensajes publicados 438 Estado Miembro 1
 
gracias por responderme tan rápido
en verdad el valor es de 0,975 normalmente debería pasar, pero no es el caso
0