[Súper solucionado] Separar parte decimal y parte fraccionaria en lenguaje C.

Iniciado por NOB2014, 4 Enero 2016, 02:10 AM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

Hola a todos.
Bueno como el enunciado lo dice es lo que quiero hacer, lo que pasa es que la parte fraccionaria no sale limpia como yo deseo, o sea, el programa que expongo a continuación la parte fraccionaria da como resultado 0.345000 y lo que necesito es 345000 a secas sin el cero y el punto, hay alguna manera de lograrlo.-

#include <stdio.h>
#include <windows.h>

int main(void){
   float numero = 12.345;
   int parte_entera;
   double parte_decimal;   
   
   parte_entera = numero/1;
   parte_decimal = numero-parte_entera;
   
   system( "cls" );   
   printf( "\n La parte entera   %d", parte_entera );
   printf( "\n La parte decimal  %f", parte_decimal );
   
   return 0;
}

Desde ya muchas gracia y un abrazo.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

0xFer

Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

NOB2014

Hola 0xFer.
Gracias por ocuparte, lo que vos propones daría 12345 y lo que necesito es:
entero   = 12
fraccion = 345
Ya encontré una manera solo que no descubro cuál es la condición para finalizar el while, no voy a saber si la parte fraccionaria tiene 1,2,3,10 dígitos.-

while( a <= 2){
   parte_decimal  *=10;
   a++;
}

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

engel lex

#3
usa etiquetas GeSHi al publicar código

espero se entienda(y funcione)
Código (cpp) [Seleccionar]
float numero = 12.123;
int entero = numero;
numero -= entero;

while((numero - (int)numero) != 0){
  numero  *=10;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

Hazlo a mano, sobre un papel y apunta los pasos que vas haciendo.
Después solo tienes que traducirlo a C.
Ten en cuenta varias cosas:
Que ocurre si el numero original es entero
Que ocurre si el tiene infinitos decimales.

Por otra parte, si no es un ejercicio y necesitas esa funcionalidad para un programa mas grande, piensa que ya existe esta función en la librería estándar de C.

kondrag_X1

y porque no utilizas %n.mf para decir el numero de decimales que quieres?

por ejemplo
printf("%n.mf",numero);

n -> indica la cantidad de números por delante de la coma
m -> la cantidad de números por detrás de la coma.
así tu número 12,123
printf("parte entera   : %4.0f",numero); 12
printf("parte decimal : %0.4f",numero); 123

user-marcos


#include<stdio.h>

int main()
{
  float f = 12.598;
  int entero = (int)f;
  float decimal = f - entero;
}

NOB2014

Hola.
Tengo consultas para los 4, pero no las voy a poner todas juntas, solo que el código de user-marcos me da correcto como debe ser la parte entera pero la parte fraccionaria da como resultado: 0.598000. Lo que necesito es que dé: 598 sin cero a la izquierda ni el punto o sea un número entero.-

#include <stdio.h>
#include <windows.h>

int main(void){
float f = 12.598;
int entero = (int)f;
float decimal = f - entero;

system( "cls" );
printf("\n parte entera   : %d",entero);
printf("\n parte decimal : %f",decimal);

return 0;
}


engel lex te dejo el código como yo lo interprete, la lógica es la correcta, pero no sé qué pasa el resultado de la parte fraccionaria no es la esperada:12300015.000000, voy a hacer algunas prácticas para intentar que de el resultado que yo necesito.-

#include <stdio.h>
#include <windows.h>

int main(void){
float numero = 12.123;
int entero = numero;
numero -= entero;

while((numero - (int)numero) != 0){
numero  *=10;
}

system( "cls" );
printf("\n parte entera   : %d", entero);
printf("\n parte decimal : %f", numero);

return 0;
}


Por el momento es todo, luego les hago la consulta a los otros 2 foristas.-

Me es imposible utilizar las etiquetas GeSHi, no sé que pasa.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

user-marcos

Lo que he puesto antes estaba incompleto.


#include<stdio.h>
#include <math.h>

#define NUMERO_DECIMALES 4
int main()
{
 float f = 12.5985;
 int entero = (int)f;
 float decimal = f - entero;
 int i_decimal = decimal * pow(10,NUMERO_DECIMALES);
 printf("%i",i_decimal); // ->  5985
}

MAFUS

A ver, ¿qué tal así?

#include <stdio.h>
#include <math.h>

unsigned p_fraccionaria(double d) {
    unsigned retvalue;
   
    d = fabs(d);
    d -= (unsigned long)d;
    d *= 1000000; // <-- 6 decimales ya es bastante precision
   
    retvalue = d;
   
    if(retvalue < d)        // <-- por si en la conversion ha habido
        ++retvalue;         // <-- perdida de precision
    else if(retvalue > d)   //
        --retvalue;         //
       
    if(retvalue)                // <-- Si no es 0, intentamos
        while(!(retvalue % 10)) // <-- quitar 0 por la derecha
            retvalue /= 10;     //
   
    return retvalue;
}

int main() {
    double num;
   
    num = 12.34;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = 12.34567890123;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = 12.00;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = 12;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = -12.34;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    return 0;
}