[SOLUCIONADO] Parsear porcentaje % a single x.x

Iniciado por Eleкtro, 14 Marzo 2013, 20:00 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

EDITO: ya está, estaba usando mal el parser, me faltaba dividirlo por 100 (Gracias Google):

Código (vbnet) [Seleccionar]
Target_Volume = Single.Parse(GTrackBar_Volume.Value, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture) / 100




Segúramente esto para ustedes séa muy fácil pero yo no le encuentro el punto, jeje.

Tengo un trackbar con valor de "0" a "100", y mi intención es convertir el valor del trackbar en un single.

Si el valor es "100", convertirlo a "1"
Si el valor es "50", convertirlo a "0.50"
Si el valor es "1", convertirlo a "0.01"

Código (vbnet) [Seleccionar]

   dim Target_Volume as single = 0

   Private Sub GTrackBar1_ValueChanged(sender As Object, e As EventArgs) Handles GTrackBar_Volume.ValueChanged

       If GTrackBar_Volume.Value = 100 Then
           Target_Volume = 1
       Else
           ' Aquí se desmadra...
           Target_Volume = 0.GTrackBar_Volume.Value
           ' también he probado con Single.Parse
       End If
     
   End Sub








Pablo Videla

Te respondo en pseudocodigo aer si entendi

omitiendo todo el metodo
Código (csharp) [Seleccionar]


if(Trackbar.value==100 ||Trackbar.value==50 || Trackbar.value==1 ){

Trackbar.value=Trackbar.value/100;
}


Espero no estar hablando huevadas, saludos  :xD


Eleкtro

#3
Lo resolví justo antes de que respondieras, lo siento por darte trabajo xD, aunque ese "/100" de tu pseudo me habría servido para solucionarlo, era eso lo que me faltaba, dividirlo (las matemáticas no son lo mío).

EDITO: Vale no hacía flata ni el parseador, sólo había que dividirlo por 100 como en tu ejemplo

Código (vbnet) [Seleccionar]
Target_Volume = sender.value / 100

un saludo!








Pablo Videla

Cita de: EleKtro H@cker en 14 Marzo 2013, 20:11 PM
Lo resolví justo antes de que respondieras, lo siento por darte trabajo xD, aunque ese "/100" de tu pseudo me habría servido para solucionarlo, era eso lo que me faltaba, dividirlo (las matemáticas no son lo mío).

un saludo!

No te preocupes, lo que me llamo la atencion es que realmente acepta enteros

http://msdn.microsoft.com/es-es/library/system.windows.forms.trackbar.value.aspx

pero no se como fue posible asignarle un float , si me resuelves la duda seria genial y no te preocupes que vi el problema solo al leerlo xD

Eleкtro

Cita de: DonVidela en 14 Marzo 2013, 20:14 PM
pero no se como fue posible asignarle un float
si me resuelves la duda seria genial

¿te refieres al trackbar?
Creo que te confundiste, en el trackbar no uso flotantes, uso un entero

en una API uso un single y por eso tenia que convertir el integer xD

Ya no sé si soy yo quien entendió mal, así que aquí tienes el code por si lo necesitas:

Código (vbnet) [Seleccionar]


   Dim Target_Volume As Single = 0.0

    ' TrackBar
    Private Sub GTrackBar1_ValueChanged(sender As Object, e As EventArgs) Handles GTrackBar_Volume.ValueChanged
        Target_Volume = sender.value / 100
    End Sub


PD: el control es una trackbar extendida, GTrackbar.

Saludos!








Pablo Videla

Realmente no conozco el objeto Single, lo que pasa es que al dividir por 100 y al quedar un numero con decimales, por ejemplo 0.001 automaticamente pasa a ser un numero flotante, y no se como pudo almacenarlo si el trackbar solo acepta enteros, ahora lo vi en el link que te deje, no se donde puedo estar equivocado XD en todo caso lo pregunto por mera curiosidad porque no uso VB.net   :xD

En caso de que no te deje te debería lanzar una excepcion  :rolleyes:

Me cuentas si pasa algo raro en momento de ejecucion de la aplicación, saludos!

ABDERRAMAH

estará sin modo estricto, supongo, pero habría que usar csng() o ctype(  , single)