none
PROBLEMA CON REDONDEO RRS feed

  • Pregunta

  • Buenas dias.. 

    Tengo una consulta..
    Tengo una consulta SQL en la cual me arroja el siguiente resultado..

    a b c
    406.77966090 59.32203389 99.04237288

    Cuando a mi consulta la convierto en Decimal con dos decimales..
    mi resultado me arroja asi..

    a b c
    406.80 59.32 99.04

    El problema es con el campo A.. Si tengo 406.77966090 el redondeo deberia aparecer 406.78..
    Mi campo lo tengo en decimal.. Lo he convertido a money y el problema continua..

    Espero me puedan ayudar..
    Gracias!...


    Jokesito

    viernes, 2 de agosto de 2013 16:40

Respuestas

Todas las respuestas

  • Hola,

    Puedes hacer algo como esto:

    Declare @Numero decimal(4, 2)
    
    Set @Numero = 95.664411
    
    Select Round(@Numero, 2, 0)
    
    --Resultado: 95.66
    viernes, 2 de agosto de 2013 16:54
  • "Jokesito" preguntó:

    > Tengo una consulta SQL en la cual me arroja el siguiente resultado..
    >
    > a              b             c
    > 406.77966090   59.32203389   99.04237288

    ¿Y a qué tipo de dato conviertes el valor devuelto por esa consulta SQL?

    > Cuando a mi consulta la convierto en Decimal con dos decimales..
    > mi resultado me arroja asi..
    >
    > a       b        c
    > 406.80  59.32    99.04
    >
    > El problema es con el campo A.. Si tengo 406.77966090 el redondeo
    > deberia aparecer 406.78..

    Vamos a suponer que el tipo de dato devuelto por esa consulta SQL lo conviertes a Decimal, lo cual te quedaría así:

            Dim a As Decimal = 406.7796609D
            Dim b As Decimal = 59.32203389D
            Dim c As Decimal = 99.04237288D

    Ahora si lo redondeamos a dos decimales:

            Dim d1 As Decimal = Math.Round(a, 2)
            Dim d2 As Decimal = Math.Round(b, 2)
            Dim d3 As Decimal = Math.Round(c, 2)

    Los valores redondeados serían:

            d1 = 406.78D
            d2 = 59.32D
            d3 = 99.04D

    La "D" final significa que el número es del tipo de dato Decimal.

    Verifica que tienes activada la instrucción Option Strict. Lo mismo si la activas se llena tu código de líneas onduladas de color azul indicadoras de errores de conversión, los cuales deberás de corregir para compilar de nuevo tu proyecto. ;-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    viernes, 2 de agosto de 2013 16:54
    Moderador
  • Hola y gracias por responder.. 

    Lo he convertido a decimal(10,2).. Use Cast() y Round().. y aun asi nada..
    lo que me llama la atencion es el caso particular del campo A, xk si te daras
    cuenta el B y C me redondea a la perfeccion..


    Jokesito

    viernes, 2 de agosto de 2013 17:45
  • La consulta lo hago x SQL.. y lo muestro a un Datagridview..
    El campo lo convierto a decimal(10,2)..

    Lo que ud. Sr. Enrique me sugiere es que capture los valores de
    esas columnas y aplique el redondeo por codigo?..

    Voy a intentarlo y le dire como me va!..
    Gracias..


    Jokesito

    viernes, 2 de agosto de 2013 17:48
  • Perdon que interrumpa.. probe tu consulta con el resultado de mi consulta
    y me salio el redondeo como debe ser..

    Vale decir.. el resultado es..

    Declare @Numero decimal(5, 2)
    Set @Numero = 406.779660
    Select Round(@Numero, 2, 0)

    ---------------------------------

    Me arroja.. 407.78..

    La pregunta es.. cuando lo inserto en mi consulta.. xk me sigue arrojando
    asi.. 407.80..


    Jokesito

    viernes, 2 de agosto de 2013 17:55
  • parece que estruviera haciendo doble conversion... en la consulta redondea los decimales a 78 y cuando lo insertas a 80. no se que pasara ahi la verdad esta como raro. 
    viernes, 2 de agosto de 2013 18:01
  • Si bien mi campo en SQL en donde aparecen esos montos es de tipo decimal de dos digitos
    la parte decimal.. cuando realizo la operacion de suma de esos campos..
    el resultado me lo muestra en 6 digitos en la parte decimal x lo que yo solo quiero mostrar 2 
    digitos decimales.. es x eso que nuevamente lo convierto a menos que aia otra manera..

    Puede que este haciendo mal.. Que me recomendarias..


    Jokesito

    viernes, 2 de agosto de 2013 19:31
  • psss se me ocurre hacer un cast... puedes hacer asi

    sum(CAST(tucampodecimal as dec(38,2)))

    trata asi para ver

    • Marcado como respuesta Jokesito viernes, 2 de agosto de 2013 20:28
    viernes, 2 de agosto de 2013 19:47
  • Efectivamente.. Consegui resolver el problema..

    CAST(SUM(tucampodecimal as decimal(10,2)))..

    Me sirvio de maravilla tu ayuda!..
    Gracias!


    Jokesito

    viernes, 2 de agosto de 2013 20:29