Foros del Web » Programación para mayores de 30 ;) » .NET »

Porque 50.05 - 50 da 0.04999999999972 vb.net

Estas en el tema de Porque 50.05 - 50 da 0.04999999999972 vb.net en el foro de .NET en Foros del Web. Hola gente. . . estoy tratando de sacar las decimales de cualquier numero que se ingrese en un textbox por ejemplo si se introduce 50.05 ...
  #1 (permalink)  
Antiguo 19/02/2011, 19:45
 
Fecha de Ingreso: abril-2010
Mensajes: 66
Antigüedad: 14 años
Puntos: 4
Porque 50.05 - 50 da 0.04999999999972 vb.net

Hola gente. . . estoy tratando de sacar las decimales de cualquier numero que se ingrese en un textbox por ejemplo si se introduce 50.05
que me arroje 05 o 5. . . si se introduce 5.73 que me arroje 73

yo habia planeado hacer algo asi
msgbox ((CDbl(TxtNumero.Text) - CInt(TxtNumero.text)) * 100)

pero cuando se evalua el numero 50.05 pzz me arroja 4.999999972

no se supone que 50.05 - 50 da 0.05 y si esto lo multiplico por 100 me daria 5 ¿?¿?

porque el vb.net me arroja esa cantidad. . . incluso hice esto

msgbox(50.05 - 50)

y me sigue arrojando el resultado con muchos decimales. . . .

Alguien que me pueda decir porque pasa esto o alguna manera para poder sacar las decimales de otra forma jeje

Saludos

Última edición por CHOSS; 19/02/2011 a las 19:52 Razón: Error de escritura
  #2 (permalink)  
Antiguo 20/02/2011, 00:50
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Porque 50.05 - 50 da 0.04999999999972 vb.net

algo que tambien te puede servir seria utilizar Split mira y quedaria algo asi

Código vb:
Ver original
  1. Dim t As String = "50.05" ' o TextBox1
  2. Dim s As String() = Split(t, ".")
  3.         MsgBox(s(1))

bueno ahi tambie pudiese ser una solucion jeje
  #3 (permalink)  
Antiguo 20/02/2011, 23:44
 
Fecha de Ingreso: abril-2010
Mensajes: 66
Antigüedad: 14 años
Puntos: 4
Respuesta: Porque 50.05 - 50 da 0.04999999999972 vb.net

Cita:
Iniciado por s00rk Ver Mensaje
algo que tambien te puede servir seria utilizar Split mira y quedaria algo asi

Código vb:
Ver original
  1. Dim t As String = "50.05" ' o TextBox1
  2. Dim s As String() = Split(t, ".")
  3.         MsgBox(s(1))

bueno ahi tambie pudiese ser una solucion jeje
Gracias buena solucion!!! . . .

aunq todavia me queda la duda del porque muestra ese resultado

y una solucion alternativoa fue

Código:
Dim t As Decimal = 50.05
Dim Res As Decimal
        Res= Math.Round(CDec(t) - CInt(t), 2)'Redondea(50.05-50)
        msgbox Res * 100 'Ya muestra 5  y no 4.999999972
Saludos
  #4 (permalink)  
Antiguo 21/02/2011, 07:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Porque 50.05 - 50 da 0.04999999999972 vb.net

Muy probablemente porque los Double son umeros de punto flotante, y por definición este tipo de valores son de aproximación, en cambio los Decimal son de longitud fija.
Este tipo de problemas son más sencillos de ver en las bases de datos, pero el tema del punto flotante se está manifestando a causa del uso de la función ROUND().
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:23.