• Lunes 20 de Mayo de 2024, 16:36

Autor Tema:  ¿double, Decimal U Otro Tipo De Datos?  (Leído 967 veces)

Anónimo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
¿double, Decimal U Otro Tipo De Datos?
« en: Viernes 21 de Marzo de 2008, 17:28 »
0
Buenas.

Estoy haciendo un programa de matemáticas para el cual necesito mucha precisión pero .net me trae de cabeza....  :angry:  El caso es que necesito manejar datos con muchos decimales y para ello pensé que sería buena opción utilizar el tipo de datos double porque tiene mayor rango de datos pero a la hora de la verdad no sé que decir. Hasta ahora no había tenido "errores" pero ha llegado un momento, que al tener tantos añadidos mi programa me he visto obligado a releer el código, entender lo que quería hacer en su día y reescribirlo. Pues bien eso he hecho en unas partes porq se repetía el código y todo funciona como antes pero al ir a tocar una parte... todo mal. Me gustaría dejar el nuevo código pues ocupa 13 lineas muchas más visibles q no 72 como antes... pero no me deja  :lightsabre: . Antes de pasar a explicar os dejo el código:
Dim resultado As Decimal = (CDbl(resta2) - CDbl(resta1))
        If CStr(resultado).Contains(",") Then
            Dim decimales As String() = CStr(resultado).Split(",")
            If decimales(0) = "0" Then
                resultado = System.Math.Pow(10, (-1 * CInt(decimales(1).Length)))
            Else
                resultado = System.Math.Pow(10, (CInt(decimales(0).Length)))
            End If
        Else
            Dim enteros As String = CStr(resultado)
            resultado = System.Math.Pow(10, CInt(enteros.Length))
        End If
        ii = resultado / 1000 ' número a devolver
Bien tengo que restar 2 números y devolver un número que tenga un decimal o un entero más que el resultado de la resta... vamos a ver para q nos entengamos copio un cachito del antiguo código
 If (CDbl(resta2) - CDbl(resta1)) < CDbl(0.000000000001) And fijado = False Then
                            ii = 0.000000000000001
                            fijado = True
                        ElseIf (CDbl(resta2) - CDbl(resta1)) < CDbl(0.00000000001) And fijado = False Then
                            ii = 0.00000000000001
                            fijado = True
                        ElseIf
En el primero me dice q si es más pequeño q eso (12 decimales) se devuelva el número más pequeño con 14 decimales. Después dice que si es más pequeño que 11 decimales se devuelva uno de 13 y así hasta pasar de decimales a enteros bueno con decimales pero q no son 0, algo bien altos.
Pues bien tan contento que estaba yo y el payaso de VB dice que 49,1 - 48,2 (q son 0,9) es 0,89999999899999899  :lightsabre: ..... una cosa así. Claro para mí eso tendría q ser 1 decimal y me iría bien pero como el señorito dice q son un huevo de decimales pues se calcula para ese huevo de decimales y no podría truncar porque como se necesita mucha precisión si el número es muy pequeñito pues... ¿Sabéis de alguna manera como se consiga una precisión buena? Me recomendáis utilizar double, decimal u otro tipo de datos? He probado este código con decimal y aunque mejoraba el resultado se queda muy lejos de antiguo código...
Bueno muchas gracias  :smartass:  :hola: