[Solucionado] Establecer la cantidad de dígitos a la derecha de la coma [C]

Iniciado por NOB2014, 9 Enero 2016, 15:34 PM

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

NOB2014

Hola.
El programa que muestro a continuación lo que hace es separar los dígitos que se encuentran a la izquierda de la coma y los que se encuentran a la derecha, o sea, la parte entera y la parte fraccionaria de una variable double, hasta hay todo bien, el error lo tengo cuando el bucle for no coincide con la cantidad de dígitos fraccionarios.-
Alguien me puede decir si es posible establecer cuantos dígitos ha ingresado el operador a la derecha de la coma, he intentado por todos los medios a mi alcance (lectura y búsqueda en la web) y no pude lograrlo.-

#include <stdio.h>
#include <float.h>

int main( void ){
double numero , decimal;
int entero, x = 1, ok, ch;

do{
printf("\n Ingrese un numero con decimales...: ");
ok = scanf( "%lf", &numero ) == 1 && numero > 0.00 && numero <= DBL_MAX;
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);

entero = (int)numero;
decimal = numero - entero;

while(x <= 4 ){
decimal  *=10;
x++;
}

printf("\n La parte fraccionaria..:%g\n", decimal);

return 0;
}


Desde ya muchas gracias
Saludos
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.-


NOB2014

Hola MAFUS.
Debo suponer que estabas apurado (¿...?), ese post lo di de alta yo y además son cosas distintas, caso contrario lo ubiera continuado.-

Saludos.
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.-

ivancea96

Citarel error lo tengo cuando el bucle for no coincide con la cantidad de dígitos fraccionarios.


Alguien me puede decir si es posible establecer cuantos dígitos ha ingresado el operador a la derecha de la coma

Qué bucle for. Qué operador.

NOB2014

Mil disculpas, el bucle es while y el operador es el que tipea el teclado.-
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.-

MAFUS

Lo puedes hacer de otra forma: pilla el número como una cadena de caracteres. Usa las ventajas de trabajar con cadenas para conseguir saber cuántos caracteres hay detrás de la coma. Después transforma esa cadena en un double con strtod si necesitas el valor numérico.

NOB2014

Hola
Lo que sucede es que el manual de donde saque el ejercicio dice que utilice el tipo float, en realidad tube que hacerlo con double porque si se ingresa por Ej. 123.045 el cero inmediatamente después de la coma hace que el resultado sea incorrecto (solo en este caso, cero después de la coma), no dice que se pueda hacer con cadena.-
Tal vez lo que estoy pidiendo no se pueda, caso contrario vos o ivancea92 ya lo hubieran descubierto.-

Saludos y gracia por ocuparse.
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.-

ivancea96

Si lo que queires es saber el número de dígitos decimales de un número, te pongo 2 opciones. La priemra, la que dijo MAFUS, leerlo como cadena, comprobar los dígitos, y ya luego convertirlo a float;
Otra solución, puede ser algo del estilo de:

float n = 456.789;
int digitos = 0;
while( (float)(int)n != n){
    digitos += 1;
    n *= 10;
}


Si quieres lograr otra cosa, explícalo mejor.

MAFUS

Lo malo de los reales en computación que siguen el IEEE 754, como en caso de C, C++, etc. es que cuándo se pasan a entero pierden precisión. El caso presentado por ivancea96 es uno de ellos. Así da como resultado 5 dígitos decimales.

NOB2014

Hola.
ivancea96 es eso precisamente lo que quiero lograr, saber la cantidad de dígitos que hay después de la coma y lo que dice MAFUS es correcto (resultado = 5 dígitos).-
Me cuesta creer que haya algo que en C no se pueda hacer, seguiremos intentando, no me voy a dar por vencido tan pronto.-     

Saludos.
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.-