Se applico la funzione round() alla variabile double che contiene 1.0000000 (che poi è 0.99999999999) mi restituisce 58658687.
![]()
![]()
Se applico la funzione round() alla variabile double che contiene 1.0000000 (che poi è 0.99999999999) mi restituisce 58658687.
![]()
![]()
Con i decimali e le approssimazioni avrai sempre dei problemi ...Originariamente inviato da giaomnitel1
Ecco un pezzettino di codice che a me non funziona sicuro:
Non ti avevo suggerito di estrarre le cifre dalla stringa ... ? Hai provato ?
mi pare impossibile...
perchè:
round(0.999999999999999999)==1 !!!!!
round(1.00000000000000000000)==1 !!!!!
se double x=0.99999999999;
round(x)==1
approssima x all'intero + vicino.. meglio di cosiì!![]()
prova!!
Non ho provato...ma è un macello..devo acqusire come stringa, convertirla in double ed effettuare i controlli...dopodichè estrarre le singole cifre (controllando di non estrarre il punto) e convertire le singole cifre e metterle nell'array...è un macello!
Cosi invece con 2 operazioni di modulo e quoziente lo facevo! Può essere che non c'è soluzione a un problema del genere?!
hai provato?? il round??
cmq round restituisce un intero, se lo stampi con %f non so cosa venga fuori, magari è quello l'errore!
.. per scrivere il codice devi fare:
[ CODE ] codice [ /CODE ]
non devono esserci spazi tra le parentesi e il CODE
Ma no ... non e' un macello ...Originariamente inviato da giaomnitel1
Non ho provato...ma è un macello..devo acqusire come stringa, convertirla in double ed effettuare i controlli...dopodichè estrarre le singole cifre (controllando di non estrarre il punto) e convertire le singole cifre e metterle nell'array...è un macello!
Cosi invece con 2 operazioni di modulo e quoziente lo facevo! Può essere che non c'è soluzione a un problema del genere?!
I floating point soffrono di questo problema (matematico) ... puoi risolvere il caso specifico con il round, ma se ne presentera' un altro subito dopo ...
Prova con le stringhe ...
Questo è il codice che sto eseguendo:Originariamente inviato da roxxy86
hai provato?? il round??
cmq round restituisce un intero, se lo stampi con %f non so cosa venga fuori, magari è quello l'errore!
#include <stdio.h>
#include <stdlib.h>
main()
{
double a=2.01;
double dec;
int b;
int dec2;
b=(int)a;
printf("a*100=%.2f\n", a*100);
dec=(a-b)*100;
dec2=round(dec);
printf("b=%d dec=%.lf\n", b, dec);
printf("Dec2=%d\n\n",dec2);
system("pause");
}
E mi esce Dec2= a un macello..anzichè 1VVoVe:
cavoli non ci credo!!VVoVe:
con il mio DEVC++ mi viene dec2==1
com'è possibile?? usi il borland per caso?
Dec2=a
???
ma che dici ... visualizza Dec2=1
... comunque, dato che non vuoi seguire il consiglio ...
Uso il DevC++...ma ho appena provato a impostare a NO la voce "ANSI Standard C" nelle opzioni di compilazione..e ora funziona! Mah...ora però tocca provare con gli altri numeri...perchè secondo me potrebbe creare altri problemi...vediamo