Condividi:        

Excel VBA: problemi con... le sottrazioni (!)

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel VBA: problemi con... le sottrazioni (!)

Postdi maxmula » 23/09/09 14:49

Rompicapo della giornata:

- Dato il seguente semplice listato:
Codice: Seleziona tutto
       
Dim ARRAY_VALORI (1 To 8, 1 TO 6)

For N = 1 To 8
            If ARRAY_VALORI(N, 5) = ID Then
                DARE = ARRAY_VALORI(N, 2)
                AVERE = ARRAY_VALORI(N, 3)
                BIL = BIL + DARE - AVERE
             End If
        Next


- e noto che i valori di array_valori che vengono letti sono i seguenti:

Codice: Seleziona tutto
Colonna (N,2) => 39.9, 39.9, 39.9, 39.9, 0, 0, 0, 0
Colonna (N,3) => 0, 0, 0, 0, 39.9, 39.9, 39.9, 39.9



Perchè all'ultima iterazione mi trovo con BIL=39,9, DARE=0, AVERE = 39.9... ed il risultato di:

Codice: Seleziona tutto
 BIL = BIL + DARE - AVERE


ha come risultato -1.4210854715202E-14?
Vabbé che è molto piccolo, ma mi aspetterei Zero...

- Sbaglio io o VBA?

Preciso che il tipo di ARRAY_VALORI è Variant in quanto contiene dati misti (numeri+stringhe); ho anche provato a convertire DARE ed AVERE IN Double ma il risultato è il medesimo.

Grazie,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Sponsor
 

Re: Excel VBA: problemi con... le sottrazioni (!)

Postdi Anthony47 » 23/09/09 16:18

Stai scoprendo che excel fa i calcoli con 15 digit di approssimazione; visto che hai numeri con 2 digit interi, la precisione e' limitata a 13 decimali.
D' altra parte immagino che quei valori che carichi negli array sono a loro volta risultato di calcoli con 15 digit di precisione, per dire che quei vari 39.9 potrebbero essere anche 39.86 oppure 30.95...
Se ti interessa verificare che il risultato tenda a Zero potrai usare, fatti tutti i calcoli con la precisione standard di 15 digit, la funzione Round, la cui sintassi (da help on line) e' Round(espressione[, numcifredecimali])
Ad esempio, nella tua routine, dopo Next:
Codice: Seleziona tutto
BIL=Round(BIL,10)   'approssima a 10 decimali

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel VBA: problemi con... le sottrazioni (!)":


Chi c’è in linea

Visitano il forum: Nessuno e 64 ospiti