Newsgroup: it.comp.appl.access
Titolo: Arrotondamenti

Nel corpo di un report ho l'elenco dei record con dei campi che
riportano valori con due cifre decimali ... euro.centesimi tanto per
capirci e uso il classico formato #.##0,00;-#.##0,00 
Nel piè di pagina ho un campo dove scrivo la somma
=Somma([Imponibile])
che viene calcolata direttamente dai valori dei record
Il problema è che se faccio la somma a mano dei valori dell'elenco che
compare nel report, questa somma si differenzia sempre di qualche
centesimo da quella calcolata da =Somma([Imponibile])
C'è qualche sistema per risolvere il problema?
Grazie
Adriano

 ha scritto nel messaggio 
news:q8erk21i9db8i51qa...@4ax.com...

Ciao Adriano
guarda qua:
http://www.donkarl.com/it/
    faq 2.1
Daniele


wrote:

Avevo già visto quell'articolo, ma non risolve il problema.
Ti faccio un esempio numerico semplice:
immagina di avere 11 valori uguali a 0.107.
Nel corpo del report vedi i 11 record con il valore 0.11.
Ora se moltiplichi 0.11x11 trovi 1.21
Ma la somma degli 11 valori che mi ritrovo nel pià pagina e che ACCESS
si calcola con =Somma(ValoreDelCampo]) è 1.166 che arrotondato viene
1.17


Il problema è nel formato del numero, che visualizza solo due cifre
decimali, ma in effetti nei calcoli tiene conto del valore reale del numero.
Il risultato esatto dell'operazione proposta da te è 1,177, che col formato
proposto a due cifre viene visualizzata come 1,18. Anche i singoli valori,
con lo stesso formato, vengono visualizzati a due cifre, quindi come 0,11,
per cui ti trovi visivamente, ma solo visivamente, un errore nel calcolo.
La soluzione dipende da ciò che tu vuoi ottenere:
1) se vuoi l'importo esatto, devi cambiare il tipo di formato di
visualizzazione, usando più cifre;
2) se vuoi ottenere come risultato effettivo 1,21, devi prima arrotondare i
singoli valori, non solo visivamente ma effettivamente, magari con una
funzione utente (non so se esiste già fatta in Access), dopo di che
sommandoli otterrai il valore sperato.
Di seguito ti aggiungo una mia funzione, che arrotonda all'intero;
modificandola puoi usarla per arrotondare al numero di decimali scelto.
Function Arrotonda(Numero As Double, Optional Intero As Long = 1) As Double
' Arrotonda un numero all'intero scelto
' Numero = il numero da arrotondare
' Intero = l'intero al quale arrotondare il numero
' Valori di Intero: 1 arrotonda all'unità (valore di default)
' 10 arrotonda alle decine
' 100 arrotonda alle continaia, ecc...
On Error GoTo Err_Arrotonda
  Dim Num As Double
  Num = Int(Numero / Intero) * Intero
  Numero = Numero - Num
  If Numero > Intero / 2 Then
    Num = Num + Intero
  End If
  Arrotonda = Num
Exit_Arrotonda:
    Exit Function
Err_Arrotonda:
    MiaMsgBox "Si è verificato il seguente errore:@N° " & Err.Number & " - " &
Err.Description & "@"
    Resume Exit_Arrotonda
End Function
Saluti
Franco
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:b7stk21iphv0m6nir...@4ax.com...

ti ha risposto Franco.
aggiungo che, anche, per l'arrotondamento commerciale è consigliata la 
funzione di Karl.
Daniele 

> 1.17
Pensa che io, con la scusa che il tipo di campo currency è in grado di memorizzare 5 cifre decimali 
(che vengono tutte usate se presenti nei calcoli non arrotondati)
ho inserito delle funzioni negli eventi AfterUpdate dei controlli dove immetto il prezzo, in maniera 
che il campo associato vada a contenere esattamente quello che l'utente visualizza.
Se l'utente digita nel campo prezzo
10,116 Euro
la visualizzazione viene portata a
10,12 Euro
Ma in realtà dietro ci sono i 10,116, e vengono pure salvati!!!
Da me invece, l'utente vede 10,12 Euro, che sono reali anche dietro. Se gli va bene buona, 
altrimenti deve scrivere 10,11. Altra cosa importante, con questo sistema, associato ad una mia 
funzione (che gira e rigira, fa lo stesso di quella di Karl), ho risolto totalmente il problema 
delle spurie.
Un mio consiglio, per calcolare
Quantità x Prezzo x (100 - Sconto) / 100 =TotdiRiga
Fatti una funzione a tre parametri dove utilizzare un arrotondamento di sicurezza per il prezzo di 
ingresso, nonchè l'arrotondamento in uscita.
Occhio anche ai Totali comprensivi di IVA.
Se devi calcolare il fatturato comprensivo di IVA per un anno contabile, l'IVA la devi calcolare per 
ogni fattura, altrimenti se la calcoli sul totale degli imponibili hai sempre qualche spuria di 
scarto.
Michele 

 nei calcoli non arrotondati)
Quattro
-- 
-- 
Massimiliano Amendola
www.accessgroup.it
Il sito italiano di svilupatori Access
www.donkarl.com/it/cisa
 

 Quattro
Sorry, Big Massimiliano, hai ragone, ero andato malamente a memoria.
Buona cena.
Michele 

 Michele


 No è carino alludere alla mia stazza...
Guarda che ti confondi con Big Luciano, quello si che si chiama big perchè è ciccione.....
Ma devi sempre vedere il lato peggiore nelle frasi?

 Ma devi sempre vedere il lato peggiore nelle frasi?
hai quotato lo smile. In ogni caso si chiama autoironia. Sono 184 per 100kg, 
non č che poi sia cosě chiatto, ma mi piace giocarci su.
