Oppure

Loading
08/10/09 16:26
ilmettiu
Ok, mi arrendo... Perchè il tipo di dati Double mi da risultati sbagliati se i due numeri, per esempio in una sottrazione, hanno diverso numero di decimali? Non è che mi piaccia molto questa cosa...


//EDIT: Rettifico, anche con lo stesso numero di decimali, ma non ho ancora capito con quale logica. Per esempio, 22,22 - 22,24 risulta 9,99999999999979E-03. Non mi torna particolarmente.
Ultima modifica effettuata da ilmettiu 08/10/09 16:28
aaa
08/10/09 17:41
theprogrammer
Sono errori caratteristici derivanti dalla rappresentazione binaria dei valori decimali.

Non derivano da questo o quel linguaggio, ma dal tipo di rappresentazione usata.
aaa
08/10/09 18:22
ilmettiu
Che cu*o... In sostanza, il risultato è sbagliato o sono io che non lo so leggere?

EDIT: moderiamo le parole, cmq il risultato non è sbagliato xD
Ultima modifica effettuata da GrG 08/10/09 18:25
aaa
08/10/09 21:30
theprogrammer
Ripeto ... e' un problema della rappresentazione, non un tuo errore o un tuo esclusivo problema.

Il risultato e' sbagliato ma deriva, appunto, dalla rappresentazione binaria con un numero di decimali limitato.

Per capirci, anche in decimale esistono problemi simili ... ad esempio

1 / 3 fa 0,33333

ma se fai 0,33333 x 3 non avrai 1 (e neanche se aggiungi altri decimali) ... allora, dimmi, e' il risultato giusto?

Puoi rimediare visualizzando il risultato tramite la Format che approssima in modo corretto aggirando il problema ...

P.S. L'esempio che hai fatto, forse, non e' quello corretto ...

aaa
08/10/09 22:05
ilmettiu
Inizialmente ho rimediato con Round, ma qualche volta da risultati ancora più assurdi, e allora non c'è niente da fare -.-" Sto continuando il programma utilizzando Single, ma ovviamente non è la stessa cosa. Cosa intendi con l'ultima frase? I valori che ho preso non sono teorici: Sono quelli che ho provato al primo inserimento, e su cui di conseguenza mi sono impuntato :) E ho ricopiato pari pari il risultato. Faccio qualche altra prova e cerco di trarne una regola generale. Perchè magari sei riuscito a farmi capire in che cosa consiste il problema, ma la funzione Format non è una soluzione (come neanche Round o utilizzare il tipo Single): Sono tutti provvedimenti provvisori, perchè non danno la precisione che mi serve. Grazie per la delucidazione, se trovo una soluzione definitiva la posto qui :k:
Ultima modifica effettuata da ilmettiu 08/10/09 22:06
aaa
09/10/09 7:36
Alfonso
Usa Currency

ci sono miglioramenti.
aaa
09/10/09 7:52
GrG
Postato originariamente da theprogrammer:
Il risultato e' sbagliato ma deriva, appunto, dalla rappresentazione binaria con un numero di decimali limitato.


lol non pensavo... :-|
aaa
09/10/09 9:43
theprogrammer
Per rimediare, prova ad usare il tipo Variant sottotipo Decimal.

L'esempio che hai fatto era

22,22 - 22,24 = 9,99999999999979E-03

ma non mi pare sia giusto ...
aaa