PDA

Visualizza la versione completa : [C] Divisione e arrotondamenti


UltraBeginner
31-10-2006, 17:00
Ciao a tutti,

ho un prlblemino...a un certo punto nel listato di un mio programma mi trovo a dover fare questa operazione

temp=convertito/(int)pow(10,i-1);

dove temp e convertito sono due variabili int...ora va tutto bene senonche quando convertito assume valore 99999 e i il valore 5, cioe si esegue la divisione 99999/10000, ho un valore restituito pari a 10 e non a 9!!!Questo perche credo che lui approssimi il risultato della divisione che e 9.9999! C e un modo per evitare che approssimi da solo questo valore?

Grazie a tutti!

Ciau :ciauz: :ciauz:

oregon
31-10-2006, 17:05
Originariamente inviato da UltraBeginner
Ciao a tutti,

ho un prlblemino...a un certo punto nel listato di un mio programma mi trovo a dover fare questa operazione

temp=convertito/(int)pow(10,i-1);

dove temp e convertito sono due variabili int...ora va tutto bene senonche quando convertito assume valore 99999 e i il valore 5, cioe si esegue la divisione 99999/10000, ho un valore restituito pari a 10 e non a 9!!!Questo perche credo che lui approssimi il risultato della divisione che e 9.9999! C e un modo per evitare che approssimi da solo questo valore?

Grazie a tutti!

Ciau :ciauz: :ciauz:

Ma le variaibili di che tipo sono?

UltraBeginner
31-10-2006, 17:08
Dunque

temp: intero (int)
convertito intero (int)
i : intero(int)

ma perke lui deve approssimare 9.9999 a 10!!!!!!!!!!!! Non ce un modo per fargli capire di prendere solo la parte intera del risultato?? :dh: :dh: :dh: :dh: :dh: :dh:

oregon
31-10-2006, 17:09
Ma se sono tutti interi, come speri di trovarci dentro un decimale?

UltraBeginner
31-10-2006, 17:11
Mha guarda,
il problema e chee appunto lui si trova a dover fare:

99999/10000

che per noi umani fa 9.9999

ma lui, dato che la variabile temp e' un intero, non dovrebbe per l appunto sbattersene della virgola e restiuirmi 9? Invece si ostina a restituire 10! Nessuno gli ha chiesto di approssimare :dh: :dh: :dh: :dh: :dh: :dh:

oregon
31-10-2006, 17:17
Avevo capito che volevi anche la parte decimale ...

Ma se scrivi



int temp, convertito=99999;
int i = 5;

temp=convertito/(int)pow(10,i-1);

printf("%d\n", temp);


ottieni 10? Sicuro?

UltraBeginner
31-10-2006, 17:22
guarda purtroppo si....l ho risolta in un modo un po becero ma funzionante, per la cronaca ho fatto cosi:

temp=convertito/(int)pow(10,i-1);
if(temp==10)
temp--;

bha...misteri del Dev C++.... :bh: :bh:

oregon
31-10-2006, 17:29
Sia con MS Visual C++ che con Dev Cpp a me da 9 come risultato ...

Con Dev Cpp devi scrivere

pow(10.0f, i-1);

Lak3d
31-10-2006, 17:30
hai sbagliato qualcosa tu.. .ho provato il codice postato da oregon e restituisce 9.

UltraBeginner
31-10-2006, 17:40
Originariamente inviato da oregon
Sia con MS Visual C++ che con Dev Cpp a me da 9 come risultato ...

Con Dev Cpp devi scrivere

pow(10.0f, i-1);

Bhe per prima cosa grazie per lo sbattimento, pero bho io non riesco a capire, ho scritto lo stesso tuo codice e continua a darmi 10....Sara il PC che da i numeri? O forse dipende anche dalla parte restante del codice(anche se non credo)?

Loading