Ver Mensaje Individual
  #7 (permalink)  
Antiguo 07/02/2010, 15:28
Avatar de genuine_carlosV2
genuine_carlosV2
 
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Funcion contadora digitos decimales

Buenas,

Sea el numero que sea, también tienes la opción de convertirlo a string:
Código C:
Ver original
  1. char numeroEnLetras[ 100 ];
  2. float numero = 3.14159265;
  3.  
  4. sprintf( numeroEnLetras, "%f", numero );

La ventaja de este código es que puedes imprimir sobre un string el numero que quieras con el formato que quieras.

Por cierto, si aceptas una sugerencia, el algoritmo de mhax, se podría optimizar un poco:
Código C:
Ver original
  1. int contarDecimales( float numero ) {
  2.     char str[ 100 ];
  3.     int i = 1;      //El primer caracter no puede ser el punto!!
  4.  
  5.     sprintf( str, "%f", numero );
  6.     while( ( str[ i ] != '.' ) && ( i < strlen( str ) ) i++;
  7.  
  8.     return ( strlen( str ) - i - 1 );
  9. }

Este algoritmo evita que tengas que recorrer hasta el final si no es necesario y, además, te ayuda a tener el numero en formato numérico si luego necesitas hacer cálculos con él (puedes saltarte la parte 'sprintf( str, "%f", numero );' si vas a pedir que te introduzcan un número por teclado como sugería mhax).

Aunque esto te puede traer un problema ya que, al menos en mi caso, '%f' sólo muestra los 5 primeros decimales del número de modo que hay que corregir un poco el algoritmo:
Código C:
Ver original
  1. int contarDecimales( float numero ) {
  2.     char str[ 100 ];
  3.     int j, i = 1;       //El primer caracter no puede ser el punto!!
  4.  
  5.     sprintf( str, "%.20f", numero );
  6.     while( ( str[ i ] != '.' ) && ( i < strlen( str ) ) ) i++;
  7.  
  8.     j = strlen( str ) - 1;
  9.  
  10.     while( ( j > i ) && ( str[ j ] == '0' ) ) j--;
  11.  
  12.     return ( j - i );
  13. }

La idea es imprimir todos los decimales y pasarle y luego ir descontando los que te has pasado (un 0 a la derecha de la coma es inútil).

Un saludo!
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM