none
REDONDEAR NUMEROS EN VB 2005 RRS feed

  • Pregunta

  • Hola:

    Tengo un problema con redondear numeros en vb 2005, no se que funcion utilizar por que las que utilice no son las que necesitó este es el ejemplo:

    12.02 debe ser 12.10

    12.23 debe ser 12.30

    12.60 debe ser 12.60

    12.88 debe ser 12.90

     Gracias.

    miércoles, 9 de junio de 2010 13:35

Respuestas

  • Con el Round el problema es que lo acerca al entero más cercano, tanto para arriba como para abajo...

    Yo usaría el math.ceiling que te redondeará para arriba en caso de tener decimales, pero como quieres que te conserve un decimal, primero opera un poco con ellos..

    valor=(math.ceiling(valor*10))/10

    Multiplicamos por 10, así te dejará el decimal que quieres conservar como entero, redondeamos y dividimos por diez para dejar los decimales como estaban...

     


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    • Marcado como respuesta Alwi Marwuin miércoles, 9 de junio de 2010 14:16
    miércoles, 9 de junio de 2010 13:44

Todas las respuestas

  • Prueba con Math.Round
     
     
     

    Saludos. Peni
    miércoles, 9 de junio de 2010 13:36
  • Con el Round el problema es que lo acerca al entero más cercano, tanto para arriba como para abajo...

    Yo usaría el math.ceiling que te redondeará para arriba en caso de tener decimales, pero como quieres que te conserve un decimal, primero opera un poco con ellos..

    valor=(math.ceiling(valor*10))/10

    Multiplicamos por 10, así te dejará el decimal que quieres conservar como entero, redondeamos y dividimos por diez para dejar los decimales como estaban...

     


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    • Marcado como respuesta Alwi Marwuin miércoles, 9 de junio de 2010 14:16
    miércoles, 9 de junio de 2010 13:44
  • Math.Round(Valor,Numero de Decimales) te permite redondear un numero al numero de decimales que tu le digas,

    Por ello, estos 2 ejemplos no los vas a convertir nunca 12.02 debe ser 12.10

    12.23 debe ser 12.30 al resultado que tu le indicas con math.round.

    Math.Round te aproxima al valor mas proximo si es 0.2 el mas proximo será 0 y si es 0.6 será 1...

     

    Se me ocurre es que podrías utilizar la función ceiling con la parte decimal del numero que tu utilizas.


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 9 de junio de 2010 13:47
    Moderador
  • Disculpa jtorrecilla, pero el round en el caso del 12.23 no lo dejaría en 12.20 ??? Creo que si no llega a 5 baja al anterior, y si es igual o superior a 5 el valor a redondear pasa al superior...

    Creo le irá mejor el ceiling, aunque tiene el problema que no tiene parametro de nº de decimales... pero es fácil solventable...


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    miércoles, 9 de junio de 2010 13:55
  • Cierto, pensé que se le había ido el dedo al poner los ejemplos
     
     
     

    Saludos. Peni
    miércoles, 9 de junio de 2010 13:57
  • Creo que no deje claro en mi mensaje que yo tampoco me decanto por Round, solo explicaba el funcionamiento...

     

    Con Ceiling he hecho este pequeño ejemplo:

     

        Dim dblValor As Double = CDbl(TextBox1.Text)
        Dim dblParteEntera As Integer = Math.Truncate(dblValor)
        Dim dblparteDecimal As Double = CDbl(dblValor.ToString().Substring(dblValor.ToString.LastIndexOf(","))) * 10
        dblparteDecimal = Math.Ceiling(dblparteDecimal)
        dblparteDecimal = dblparteDecimal / 10
        MsgBox((CDbl(dblParteEntera) + dblparteDecimal).ToString())


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 9 de junio de 2010 13:58
    Moderador
  • Ups... vale..  te entendí mal... jejeje. (Ya me parecía raro.. ;) )
    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    miércoles, 9 de junio de 2010 14:03
  • Creo que si usas el Round de la siguiente manera te va a servir:
    Math.Round(Valor + .04, 1)
    Suerte!
     
     

    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://www.gustavo-cantero.com.ar
    miércoles, 9 de junio de 2010 14:06
  • Depende de donde venga el número eso es arriesgado. Si viene de una operación el número no sabes con cuantos decimales vendrá, y si te viene por ejemplo con :

    20.005

    Al hacer la suma quedará 20.405 y dará como resultado 20.40 y no 20.41

     


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    miércoles, 9 de junio de 2010 14:17
  • Con el Round el problema es que lo acerca al entero más cercano, tanto para arriba como para abajo...

    Yo usaría el math.ceiling que te redondeará para arriba en caso de tener decimales, pero como quieres que te conserve un decimal, primero opera un poco con ellos..

    valor=(math.ceiling(valor*10))/10

    Multiplicamos por 10, así te dejará el decimal que quieres conservar como entero, redondeamos y dividimos por diez para dejar los decimales como estaban...

     


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    Gracias por la respuesta mi estimado amigo me fue de mucha ayuda.
    miércoles, 9 de junio de 2010 14:19
  • Por lo que vi sólo llegan valores con dos decimales, pero es verdad que
    si llegan tres decimales no funcionaría. 
    Saludos.
     
     

    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://www.gustavo-cantero.com.ar
    miércoles, 9 de junio de 2010 14:27
  • Bueno, como comentario Gustavo, es que sigue siendo conflictivo lo de sumar.

    20.000 + 0.05 = 20.05 que redondeado te dará 20.1 (igual o superior a 5 te va al superior) y no 20.0

    Vamos para que te funcionara cien por cien seguro tendrías que sumar 0.04999999999 ..... 999999 y así sucesivo de nueves...

    Es mejor siempre utilizar operaciones exactas que sumar un valor predeterminado que puede inducir a errores no controlados. (aunque el coste de la operación sea algo mayor que una simple suma)

     


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    miércoles, 9 de junio de 2010 14:51
  • En realidad, el Math.Round al redondear 20.05 a un decimal te devuelve 20.00 (lo puedes ver en la documentación en http://msdn.microsoft.com/es-es/library/wyk4d9cy(v=VS.80).aspx donde 4.5 lo redondea a 4.0).<o:p></o:p>

    Saludos.<o:p></o:p>


    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://www.gustavo-cantero.com.ar
    miércoles, 9 de junio de 2010 15:05
  • Pues vaya!!!, y yo llevaba ahora no se cuanto tiempo pensando lo contrario... ( esto lo debía traer de algún otro lenguaje y ya sin mirar lo daba por supuesto) :P

    Pues muy posiblemente funcione con 0,05 (creo que iría perfecto). Pero personalmente prefiero pensar en cálculos exactos que en las sumas por si hay algun caso que no hayamos pensado...


    Iván Noya Cendal
    http://www.seuvella.com

    Lleida - España

    Si la respuesta te ha ayudado, marcala.
    miércoles, 9 de junio de 2010 15:19