Newsgroup: it.comp.lang.visual-basic
Titolo: Stranissimo !!

Il codice che segue teoricamente dovrebbe scrivere due valori uno č 0,20 e 
l'altro 0,05
Sul mio PC stampa solo 0,20 e quando BltPunt(18) e BltGiocata hanno valore 
0,05 visualbasic  dice che la condizione č falsa.
Qualcuno sa dirmi perchč?
Saluti
Private Sub Form_Load()
    Dim BltPunt(18) As Single
    Dim BltGiocata As Single
    Dim iLoop As Integer
    BltPunt(1) = 200
    BltPunt(2) = 100
    BltPunt(3) = 50
    BltPunt(4) = 40
    BltPunt(5) = 30
    BltPunt(6) = 20
    BltPunt(7) = 10
    BltPunt(8) = 5
    BltPunt(9) = 4
    BltPunt(10) = 3
    BltPunt(11) = 2
    BltPunt(12) = 1
    BltPunt(13) = 0.5
    BltPunt(14) = 0.4
    BltPunt(15) = 0.3
    BltPunt(16) = 0.2
    BltPunt(17) = 0.1
    BltPunt(18) = 0.05
BltGiocata = 0.25
For iLoop = 1 To 18
    If BltPunt(iLoop) <= BltGiocata Then
        Debug.Print BltPunt(iLoop)
        BltGiocata = BltGiocata - BltPunt(iLoop)
    End If
Next
End Sub

     Dim iLoop As Integer
prova ad usare double che hanno maggior precisione

 ha scritto nel messaggio 
news:da0epv$pp0$1...@newsreader.mailgate.org...


AlterX scriveva il 30/06/2005 :

Chapeau.
Alberto
-- 
I have a dream that my four little children
will one day live in a nation where they
will not be judged by the color of their skin
but by the content of their character.

 Non credo sia questo il problema ...
Google, proprio no. eh?



Che centra ... 


Non mi sarei aspettato nulla di differente rispetto al risultato che
hai ottenuto. Riguardati bene cio' che hai scritto.
--
Ciao!
Luca Menegotto

 
Non dire parolacce! Poi ti danno del maleducato saccente.
	maxx

 ha scritto nel messaggio 
news:uuf7c1lb42cn8oe97...@4ax.com...

Non ci arrivo proprio
quando BltPunt(iLoop) =0,05 e BltGiocata  = 0,05 la condizione if dovrebbe 
essere true ma mi da false 

 ha scritto nel messaggio
news:EiPwe.29681$yM4.4...@twister2.libero.it...

Infatti se calcoli la loro differenza non viene zero ma 3,72529E-09...
Se proprio non ti piacciono i Double e arrivi al massimo ai centesimi usa i
Currency...
Bye
Raf

 
Siccome oggi mi sento saccente direi anche di leggersi questo paragrafo:
http://www.library.cornell.edu/nr/bookcpdf/c1-3.pdf
ciao
	maxx


Ed č proprio cosě, che funziona. Ricontrolla, stai guardando nel posto
sbagliato.
--
Ciao!
Luca Menegotto

usa questa riga (provata):
If Round(BltPunt(iLoop) - BltGiocata, 5) <= 0 Then
oppure
If Round(BltPunt(iLoop), 5) <= Round(BltGiocata, 5) Then
Se non ricordo male VB converte sempre in double i valori single per fare 
delle operazioni su di essi, quindi utilizzando valori Single invece di 
Double non porterebbe alcun vantaggio dato che cmq vengono convertiti 
implicitamente prima di essere processati.....
.o0-- I.d.N. alias JYD --0o.
Please Cut "-some trees-" for reply

Roby ha detto questo giovedì :

Se ti fanno notare che è un problema di tipizzazione delle variabili, 
una persona sveglia e volenterosa prende google e fa una ricerca.
Visto che questa cosa oramai la sanno anche i sassi, e sul NG è stata 
ripetuta n volte, la persona sveglia e volenterosa di cui sopra avrebbe 
trovato la soluzione in un minuto.
Lo sfaticato invece avrebbe postato roba tipo "che centra..."...


 Dim BltGiocata As Single
 Prova a usare delle variabili Double, e dopo anche la funzione CDbl.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
???
Scusa, ma allora a cosa serve il tipo di dato Single? A fare la bella 
statuina?
	maxx

La soluzione è proprio CURRENCY
"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:da0fpt$uad$1...@alix.livenet.it...


 
Dalla deriva delirante che sta prendendo questo thread ho l'impressione 
che la tregua dell'afa sia terminata. :-(
	maxx
P.S. Il mantenimento del link di cui sopra in questo post non e' 
puramente casuale.

 ha scritto nel messaggio 
news:mn.f2df7d56e...@hotmail.com...


 
La soluzione e' usare il tipo Currency con i numeri che hai usato nel 
tuo codice. Dovendo utilizzare altri numeri potrebbero esserci comunque 
dei problemi.
La soluzione e' studiare i numeri in virgola mobile per capire quali 
sono i problemi che si possono verificare quando li si utilizza.
ciao
	maxx

If Round(BltPunt(iLoop), 5) <= Round(BltGiocata, 5) Then
Dai, basta scherzare, su...
--
Ciao!
Luca Menegotto

 cosa cerco su google SAPIENTONE !!!
Se è una domanda ci vogliono i punti interrogativi, fenomeno.
Comunque, per capitare se sono io arrogante o solamente tu scemo, ho 
cercato su google la prima cosa che sarebbe venuta in mente ad un Q.I. 
standard, a fronte della risposta di AlterX (ossia, prima della mia 
osservazione).
Rileggiamo cosa ha scritto AlterX (che era una battuta, ovviamente, ma 
conteneva l'indizio giusto):
"prova ad usare double che hanno maggior precisione"
Apro google e digito "precisione double" (le uniche due parole con un 
minimo significato tecnico nella frase).
Clicco su 'cerca'.
Il *PRIMO* risultato è esattamente ciò che ti serviva, ossia una bella 
dissertazione sui problemi dei tipi a virgola mobile, e la *PRIMA* 
parola del post è Currency, e la *PRIMA* risposta al post iniziale 
spiega perchè si debbano usare i Currency per evitare questi problemi.
Allora, sono io sapientone o tu sfaticato?


 Chapeau.
What?!?!?
I don't understand about above language!!

AlterX ci ha detto :

Era un complimento per la battuta.
Mi è piaciuta.


> Prova a usare delle variabili Double, e dopo anche la funzione CDbl.
no, rettifico, l'ho provato con il Double ma non funziona, come però ti
hanno già detto altri
Però questo funziona:
    Dim BltPunt(18) As Single
    Dim BltGiocata As Single
    [....]
    For iLoop = 1 To 18
        If BltPunt(iLoop) <= BltGiocata Then
            Debug.Print BltPunt(iLoop)
            BltGiocata = CCur(BltGiocata - BltPunt(iLoop))
        End If
    Next
Ho imparato qualcosa oggi. Ciao


 Mi è piaciuta.
Ok, ma cosa significa?!?

AlterX, giovedì alle 14.49.22, ha estratto dai neuroni:

E' la contrazione, in francese, della forma italiana "tanto di 
cappello", o "mi levo il cappello di fronte a questa cosa".
Chapeau significa, appunto, 'cappello'.
Ciao


 Chapeau significa, appunto, 'cappello'.
wow...però!