Título: Problema con decimales (C) Publicado por: maria16 en 27 Noviembre 2016, 06:14 am Hola, el problema es que h, en el momento que se hace menor a 1 (cuando n>10), aunque sea 0.9 lo toma como 0, como si fuera un entero. Alguien podría decirme lo que estoy haciendo mal? por favor
Código: #include <stdio.h> #include <stdlib.h> #include <math.h> #define xo 5 #define xn 15 #define n 10 double main() { double h, A, xi; int i; h=(xn-xo)/n; printf("El paso h es: %f \n", h); Título: Re: Problema con decimales (C) Publicado por: engel lex en 27 Noviembre 2016, 06:32 am primero tienes un error garrafal... "double main()" main siempre debe ser int y unicamente int, y en general debe retornar 0 que indica "ok" a nivel de sistema...
segundo... los defines en general no son mala practica pero no están lejos, ya que son directivas de preprocesador y no estás declaradas de manera bien controlada que tipo de variable son en tu codigo Xo, Xn y n... podrías responder eso en base a tu codigo? char, short, int, long, float, doble? sabes si es signed o unsigned? la función main está incompleta, aunque puede ser una asunto de copiado así que no me meto allí... tienes 2 caminos seguir con los defines (que no lo recomiendo para nada) y entonces usar casting (conversión implicita) donde solo cambiarías una linea Código
o de la manera que debe ser, usando constantes de manera que están disponibles en tu código tienes controlado su tipo y no son alterables Código
Título: Re: Problema con decimales (C) Publicado por: maria16 en 27 Noviembre 2016, 06:37 am muchas gracias!! si estaba incompleto porque copié solo la parte del error, y lo del double main () lo puse despues de estarlo modificando por 3 horas jaja
Título: Re: Problema con decimales (C) Publicado por: engel lex en 27 Noviembre 2016, 06:49 am el problema era (y para que tengas cuenta esto en el futuro) que los resultados de las operaciones en C/C++ siempre retornan el tipo de variable operado, son inconscientes de quien los recibe...
así que Código: float = int/int dividirá como int (sin decimales) y lo pasará al floatsi es una operación entre diferentes tipos siempre se devolverá el mayor de los tipos (esto se llama "promoción de operadores" básicamente agarra el tipo más limitado, lo convierte en el tipo más grande y luego opera) así que Código: float = int/float dividirá como float, es decir con decimaleso float = float/int esto pasa igualmente con números Código
|