Conteggio cifre di un numero decimale

-2

Esiste un algoritmo per contare le cifre di un numero decimale oltre a salvarlo come stringa e quindi eseguire il ciclo per trovare il punto decimale e quindi contare le cifre?

    
posta HYDRYM 14.03.2015 - 12:15
fonte

2 risposte

1

So cosa stai pensando. Stai pensando che se fosse possibile enumerare in qualche modo le cifre dopo il punto decimale, potresti contarle. Ma che tu usi una stringa o qualsiasi altro meccanismo, c'è un problema fondamentale:

how do you know when to stop counting?

Convertire il numero in una stringa può sembrare una soluzione semplice, ma è solo perché qualcun altro ha già preso questa decisione fondamentale per te, e la loro scelta ha una probabilità piuttosto sottile di essere la scelta giusta per te. Se chiedi una rappresentazione in stringa di π (felice π giorno, a proposito!) Otterrai ovviamente una stringa di lunghezza finita, che potrebbe tentarti credere che π abbia un numero finito di cifre.

Non.

Quindi, quello che stai cercando di fare non funzionerà, perché ci sono molti numeri che non possono essere rappresentati in modo accurato usando o float o double, quindi tali numeri sembrano contenere cifre decimali senza senso che finiscono lì dove la precisione del float o doppie estremità. Per favore, prova questo a casa: printf( "%.30f\n", 2.9f ); il risultato sarà qualcosa di divertente, come 2.900000095367431640625000000000 o 2.899999999999999911182158029987 , o simile a seconda della macchina e del compilatore.

E, naturalmente, questo si manifesterà facilmente nei calcoli: se dividi 29 per 10 non otterrai realmente 2.9 , ma un'approssimazione di esso.

Quindi, qualunque cosa tu pensi che stai per realizzare contando le cifre decimali di un numero non funzionerà. Hai qualche altro tipo di problema da risolvere e pensi che il conteggio delle cifre decimali lo risolva e sei venuto qui per chiederci come implementare la tua soluzione immaginaria. Questo è un tipico esempio di chiedere una risposta invece di fare una domanda. Non c'è nulla di cui vergognarsi, molte persone commettono questo errore nello scambio di stack, ma il mio punto qui è che è meglio trovare un modo per risolvere il problema originale che non prevede il conteggio delle cifre decimali di un numero.

    
risposta data 14.03.2015 - 19:15
fonte
0

Hai opzioni:

  1. Prendi il valore assoluto del numero, ora è positivo.
  2. Quindi trasformalo in una stringa.
  3. Quindi trova il "." cercando il "." usando una funzione di stringa o guardando un carattere alla volta.

Oppure puoi provare:

  1. Prendi il valore assoluto del numero.
  2. Utilizza la funzione di registro, che potrebbe trovarsi in una libreria matematica. Non vuoi il registro naturale, vuoi la versione base di un registro.
  3. Tronca la risposta dal registro e aggiungi 1. Ora hai il numero di caratteri a sinistra del punto decimale.

oppure puoi provare:

  1. Prendi il valore assoluto del numero.
  2. Tronca il numero. Questo butta via tutto a destra.
  3. Trasforma il risultato in una puntura
  4. ottieni la lunghezza della stringa.

che è più veloce? che è più facile da capire?

Provane uno, crea casi di test, cronometralo; quindi passare a quello successivo.

Ricerca perché assumere il valore assoluto è importante.

    
risposta data 14.03.2015 - 18:44
fonte

Leggi altre domande sui tag