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
Multiplicalo por 1000
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
usa etiquetas GeSHi al publicar código
espero se entienda(y funcione)
float numero = 12.123;
int entero = numero;
numero -= entero;
while((numero - (int)numero) != 0){
numero *=10;
}
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.
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
#include<stdio.h>
int main()
{
float f = 12.598;
int entero = (int)f;
float decimal = f - entero;
}
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
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
}
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;
}
yo lo que haría seria hacer el logaritmo en base 10 en entero del numero con sus decimales y así obtendría la parte entera, luego se la restas al numero original y obtienes la parte fraccionaria.
mira yo lo utilice para obtener el reverso de un numero
int reverso(int num){
int reverso=0,exp=log10(num);
while(num>0){
reverso = reverso + (num%10)*pow(10,exp);
exp--;
num=num/10;
}
return reverso;
edito:
He probado ha hacerlo y he visto una manera más simple de hacerlo
#include <stdio.h>
int main(){
float num=44.5;
int entera=num;
float fracionaria=num-entera;
}
creo que era eso lo que se buscaba
Hola, gente.
MAFUS, gracias por ocuparte, el ejemplo de
user-marcos funciona a la perfección y es en parte lo que proponías, en cuanto a hacerlo en un papel ya lo hice y lo quiero aplicar al código de
engel lex pero todavía no lo logro.
CitarQué ocurre si el número original es entero,
ya lo probé y da como parte fraccionaria:cero(correcto)
CitarQue ocurre si tiene infinitos decimales
me parece que esto se soluciona con: #define NUMERO_DECIMALES 4.-
Por último, decirte que voy a probar el código que posteaste se lo ve interesante.-
Noob_boy, me gustaría que postearas algún ejemplo de lo que propones, te imaginaras que con 63 años ya no me acuerdo de logaritmo, desde ya muchas gracias.-
Saludos.
Daniel
Tambien dispones de modf incluida en math.h la cual hace justo lo que buscas:
#include <stdio.h>
#include <math.h>
int main(void)
{
double num = 32.125, fract, entero;
fract = modf(num, &entero);
printf ("Entera: %g\nDecimal: %g\n", entero, fract);
return 0;
}
Saludos
llegué tarde XD pero venia a decir que tal vez mi código falla por cosas de la precisión de la variable flotante
Hola.
#include<stdio.h>
int main( void ){
double numero = 12.09;
int entero = numero, x = 1;
double decimal = numero - entero;
printf("\n %g\n", decimal);
while(x <= 2 ){
decimal *=10;
x++;
}
printf("\n La parte fraccionaria..:%g\n", decimal);
return 0;
}
Saludos.
Daniel