Newsgroup: it.comp.lang.visual-basic
Titolo: Re: moltiplicazione tra numeri


Risolto con Currency
Le tue spiegazioni sono veramente esaurienti!!!!
Il fatto è che facendo altre moltiplicazioni all'interno dello stesso
programma
non avevo mai avuto problemi....
La domanda è questa....
Devo fare operazioni molto semplici,
mi conviene cambiare tutto quello che era stato dichiarato come single in
currency?????
(Questo per evitare che mi capitino problemi come quello di cui sopra)
Consigli????
Comunque grazie davvero
IAK

 single in currency?????
In linea di principio, importi e quantità è bene che siano in Currency.
Devono essere in virgola mobile le variabili che, per il loro utilizzo,
vengono sottoposte a calcoli particolari.
Ad esempio, se devi calcolare gli interessi su un importo, è bene che il
tasso di interesse sia in virgola mobile, in quanto durante la composizione
(1+tasso)^numero_di_periodi, le virgole in fondo in fondo diventano
significative, mentre con un Currency avresti un troncamento alla quarta
cifra, con grossi malfunzionamenti.
Ciao
Alberto
-- 
E tutto mi sembrava andasse bene...

 1824346,8 ??????
Usa Double in tutte le dichiarazioni e cerca i post in cui si discute - su
questo gruppo - della notazione in virgola mobile.
Nota che anche i double hanno limiti pesantissimi. 
Non puoi usare i tipi single o double senza conoscere cosa sono e come
funzionano.
termoPilucco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 1824346,8 ??????
Questione discussa e ridiscussa...
Quello che tu sostieni essere il 'risultato corretto' è in realtà corretto 
in ottica decimale.
Quando utilizzi tipi a virgola mobile (come single e double), entri in un 
sistema matematico diverso. E quando imposti una variabile a virgola mobile 
facendo:
prz = 1479,6
stai in realtà facendo
prz = CDbl(1479,6)
E CDbl non è reversibile. Cioè, siccome i numeri in virgola mobile non 
rappresentano gli stessi numeri rappresentabili con i numeri a virgola 
fissa, non è detto che esista un numero a virgola mobile corrispondente 
*esattamente* al decimale che tu gli stai dando in pasto. A questo punto, 
nel single (o double) viene memorizzato il numero a virgola mobile *più 
vicino* a quello che tu gli hai detto (in decimale, però). E Single e Double 
hanno in gestione valori non necessariamente coincidenti.
Se devi effettuare calcoli scientifici con moltissime cifre decimali, i 
numeri a virgola mobile offrono una precisione infinitamente maggiore dei 
tipi a virgola fissa.
Quando invece i decimali che si vogliono gestire sono pochi (come nel caso 
degli importi), i tipi a virgola mobile sono assolutamente inadeguati, in 
quanto inseriscono implicitamente delle approssimazioni che riconvertite in 
decimale saltano agli occhi.
E' una questione di scelta.
A seconda di quello che si vuole ottenere, si possono utilizzare tipi a 
virgola fissa (tipicamente il Currency) o a virgola mobile (tipicamente il 
Double o il Single).
Ciao
Alberto
-- 
E non so se avrò gli amici a farmi il coro,
o se avrò soltanto volti sconosciuti,
canterò le mia canzoni a tutti loro
e alla fine della strada
potrò dire che i miei giorni li ho vissuti 

Mi piacerebbe capire il perchè di quello che mi sta accadendo
in una banale moltiplicazione
1)
dim qta as single
dim prz as single
dim impo as single
qta = 1233
prz = 1479,6
impo = qta * prz
impo = 1824347
ossia è il risultato arrotondato....
2)
dim qta as single
dim prz as single
dim impo as double
qta = 1233
prz = 1479,6
impo = qta * prz
impo = 1824346,76989746
Perchè non ottengo il risultato corretto che sarebbe poi
1824346,8 ??????
Grazie

 termoPilucco
Con i double ho avuto ancora maggiori problemi....
ma solo durante questo calcolo!!!!
Mah
Grazie
IAK