Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ayuda con tarea C#

Wise Man

Bovino maduro
Desde
25 Abr 2010
Mensajes
415
buenas tardes tengo un problemita con una tarea que ya me trae y no he podido encontrar como resolverla espero y me puedan ayudar:

necesito hacer un metodo que reciba de muestra dos numeros decimales, (supongamos 2.34 y 4.5678), entonces el metodo debe darse cuenta cuantas cifras tiene el primer numero despues del punto y elevar o redondear siempre a la siguente unidad el segundo numero de modo que ambos queden con el mismo numero de cifras por ejemplo:

ToNextDouble(2.34, 4.5678) debe retornar 4.57 (elevar al siguiente numero la segunda cifra ya que el primero tiene 2)

ya hice este par de metodos pero no me funcionan, alquien me puede echar la mano?

Código:
        static public int ToNextIntNumber(double a)
        {//Reciba un numero decimal y lo eleva al siguiente entero
            int b;
            b = Convert.ToInt32(a);
            if ((a % 1) != 0 && ((a % 1) <= 0.5))
                b++;
            return b;
        }

        static public double ToNextDouble(double nToRise, double nIndividual)
        {
            int i = 1;
            while (true)
                if ((nIndividual * i) % 1 == 0)
                    break;
                else
                i *= 10;
            nToRise *= i;
            int a = ToNextIntNumber(nToRise);
            return a/i;
        }
 
no me recuerdo bien mis clases de c de la prepa pero yo lo aria masomenos asi

la variable en donde recojes los datos
y nomas pones
printf("%f\n", (int)(tu-variable*100)/100.0);
 
interesante la opcion del amigo xomen.... tambien te envio otra opcion que es Math.Round para redondeos y el Math.Pow para potencias
Código:
  static public double ToNextDouble(double a, double b){
      double c;
      int sw=1,i=0;
      while(sw==1){
        c = a * Math.Pow(10,i);
        if( ( c - (int)c ) ==0 ) sw=0;
        else i++;
      }
      return Math.Round(b,i);
  }
algunos test :
ToNextDouble(2, 4.5678) => 5
ToNextDouble(2.3, 4.5678 ) => 4.6
ToNextDouble(2.34, 4.5678) => 4.57
ToNextDouble(2.342, 4.5678 ) => 4.568
 
jejejeje disculpen si no esta muy bien pero ya estoy algo entumido en c :)
 
interesante la opcion del amigo xomen.... tambien te envio otra opcion que es Math.Round para redondeos y el Math.Pow para potencias
Código:
  static public double ToNextDouble(double a, double b){
      double c;
      int sw=1,i=0;
      while(sw==1){
        c = a * Math.Pow(10,i);
        if( ( c - (int)c ) ==0 ) sw=0;
        else i++;
      }
      return Math.Round(b,i);
  }
algunos test :
ToNextDouble(2, 4.5678) => 5
ToNextDouble(2.3, 4.5678 ) => 4.6
ToNextDouble(2.34, 4.5678) => 4.57
ToNextDouble(2.342, 4.5678 ) => 4.568


Muchas gracias me sirvió bastante tu ayuda
 
Volver
Arriba