Visual Basic - pasar string a double

Life is soft - evento anual de software empresarial
 
Vista:

pasar string a double

Publicado por andreafuhr (95 intervenciones) el 12/09/2005 13:21:21
Hola Gente!!!!
Les cuento lo que me sucede: Tengo una grilla con productos (simular los renglones de una factura), el usuario ingresa el codigo de producto y la cantidad en cada renglon, luego el sistema multiplica cantidad * precio unitario y se lo asigna a la coluMna Total. Hasta aqui todo bien.
Pero luego, fuera de la grilla, tengo un label en el cual quiero visualizar la suma de la columna total. Para ello uso la funcion val. Voy acumulando en una variable la suma del total de cada producto quedando algo asi:
for i=1 to cantidadRenglones
grilla.col = 6
grilla.row = i
suma = suma + val (grilla.text)

pero cuando consulto el resultado acumulado en la variable suma me encuento que no sumo los decimales, solo la parte entera...evidentemente el problema esta en la funcion val. Debo usar alguna otra?
Si alguien sabe como hacerlo se lo agradeceria mucho que me lo haga saber.
Desde ya, mil gracias de antemano.
ANDREA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:pasar string a double

Publicado por Zoto (41 intervenciones) el 12/09/2005 14:04:08
El problema se debe a causa de lo siguiente, según creo yo:

La función Val devuelve la expresión numérica de un String numérico dado. Y la cuestión es que, contrariamente a lo que dices, lo hace incluyendo los decimales.
El problema en cuestión, no obstante, se encuentra en que seguramente debes usar el signo coma "," para separar la parte entera de la decimal. Sin embargo, la función Val toma el signo coma como un valor String y, al encontrarse con uno, devuelve el valor obtenido directamente, es decir, detiene su ejecución.
Es decir, que si tu escribes 2,654, Val no lo devuelve como dos mil seiscientos cincuenta y cuatro ni tampoco, como dos coma seiscientos cincuenta y cuatro (decimal) sino como, simplemente, 2.
Esto se debe a que el signo que toma Val como separador de enteros entre decimales es el punto "."

Como otra alternativa, tienes la opción de convertir el String al formato numérico Double, usando la función CDbl.

Esta sí toma la coma como separador de decimales y enteros y el punto como separador de miles.

Si usas CDbl, simplemente, deberás cambiar el código:

val (grilla.text)

por:

CDbl(grilla.text)

Y entonces el número incluirá decimales.

_____________________

Ejemplos:

Si grilla.text = "2,456"

CDbl devuelve 2,456 (número decimal)

Si grilla.text = "2.456"

CDbl devuelve 2456 (número entero)

____________________

Ten en cuenta que, para evitar confusión al usuario que use tu programa, deberías cambiar el valor que introduce el usuario en grilla.text, para que, antes de realizar la suma, sepa que su valor se ha cambiado al formato correcto, es decir:

si el usuario introduce 2,456 que no crea que ha introducido un número entero, sino que sepa que se trata de uno decimal, de igual manera que si introduce 2.456, por ejemplo, que no crea que ha introducido un número decimal, porque CDbl lo tomará como un entero y eso puede le confundir.
Esto lo puedes escribir en el evento Validate del TextBox grilla.
Simplemente bastará con escribir una función que elimine los puntos del texto escrito. Algo así servirá:

Private Sub grilla_Validate()
grilla.text = Replace(grilla.text,".","")
End Sub

Esto elimina los puntos del texto numérico escrito por el usuario para alertarle que el programa está tomando su número como un entero, no como un decimal.

Espero que esta explicación te ayude a resolver tu problema.
Si tienes dudas, comunícalo aquí.

Hasta otra,

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

RE:pasar string a double

Publicado por Plutarco (27 intervenciones) el 12/09/2005 19:28:52
No apliques el val, porque el val al primer caracter que no es numerico te trunca el resultado, hay dos funciones bàsicas que resuelven tu problema y son Csng() y Cdbl().

Csng() te convierte una expresiòn a tipo Single y Cdbl() a tipo Double independientemente del formato que uses para mostrar tu cantidad, asi que tu còdigo quedarìa de la siguiente forma:

for i=1 to cantidadRenglones
grilla.col = 6
grilla.row = i

suma = suma + Csng(grilla.text)
ò
suma = suma + Cdbl(grilla.text)

Espero haber podido ser de ayuda.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar