Newsgroup: it.comp.appl.access
Titolo: Euro maledetto!

Ho il seguente problema nella stampa di una fattura (creata tramite un
report access):
ho 283 pz. che costano 3,3322 euro ciascuno, per un importo di euro 943,01
L'iva al 20 % di tale importo è 188,60 euro.
Il totale (importo + iva) è magicamente pari a euro 1131,62 (invece di
1131,61)
Il problema è che access (benchè io abbia specificato le cifre decimali a 2
per quanto riguarda importo, iva e totale) tiene conto di tutte le cifre
decimali dopo la seconda!!!
Infatti, rifacendo i calcoli a 4 cifre decimali avro':
importo: 283*3,3322=943,0126
iva 20%: 188,6025
che sommati fanno 1131,6151 che arrotondato a 2 cifre fa esattamente 1131,62
euro.
Io voglio invece che vengano sommate solo le ulrtime 2 cifre dopo la virgola
e basta! come posso fare?
Spero di essere stato chiaro.
Un grazie a tutti.
Luca.

 ha scritto nel messaggio

Mi sembra che tu ti sia risposto da solo.
Access si comporta  normalmente, se vuoi fare quello che dici devi
arrotondare i due importi prima di sommarli. (operazione peraltro
obbligatoria per legge, infatti l'iva va arrotondata a parte)
Sib
PS oddio, non e' che il tuo problema fosse proprio di arrotondare?
Se si sul sito comune trovi certamente qualcosa.

"Sib" <si...@SPAMMiol.it> ha scritto nel messaggio
news:ktQ98.47956$om6.1...@news1.tin.it...

prova in questa maniera
"=CLng([TuoCampoPezzo]*[TuoCampoprezzo]*100)/100" =risultato con due
decimali
"=CLng(([TuoCampoImponibile]*[TuoCampoIva]/100)*100)/100
da inserire anche nella query si selezione collegata al report oppure
direttamente
in un campo del report
metodo molto casalingo ma efficace
Saluti psq

 ha scritto nel messaggio
news:a48jvc$1lg$1...@lacerta.tiscalinet.it...



 metodo molto casalingo ma efficace
Da molti anni non mi sembra possibile di estirpare questo consiglio.
Purtroppo un tale uso di CLng (e CInt) è molto diffuso perché la gente
non legge la guida in linea dové ce scritto che arrotondono .5 al prossimo
numero pari. --> La metà di tutte le case con .5 vengono arrotondato falso
(cioé non in senso commerciale).
Puoi trovare più discussioni sul oggetto a
http://groups.google.com/advanced_group_search
--
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

Luca,
forse la soluzione è più semplice di quanto sembri!
Per arrotondare un numero con due cifre decimali, io utilizzo normalmente la
funzione "round".
Questa funzione si può tranquillamente utilizzare nelle query e nelle
origini dei controlli delle maschere o dei report.
Nel tuo caso specifico, mentre l'importo viene visualizzato correttamente,
la somma degli importi (TotaleImponibile) è errata in quanto tiene conto di
tutte le cifre decimali.
In questo caso puoi inserire la funzione
"=Round([Quantità]*[PrezzoUnitario];2)" nell'origine del controllo [Importo]
e poi fai la somma normalmente,
oppure
nel campo [TotaleImponibile] puoi direttamente scrivere
"=Somma(Round([Quantità]*[PrezzoUnitario];2))"
Vorrei che qualche esperto mi spiegasse perchè dovremmo utilizzare formule
particolarmente complicate tipo "=int((x/100)*100)/100)*100 ecc."
Grazie.
Ciao da Gianni

 particolarmente complicate tipo "=int((x/100)*100)/100)*100 ecc."
A parte che quello che scrivi non esiste, la formula giusta
e':"=int(X*100)/100"
Questa formuletta, a differenza di Round, serve a segare i decimali in
eccesso senza arrotondare.
Ovviamente non va bene nel caso dell'euro perche' non arrotonda.
Sib



usa la funzione di Karl  per arrotondare prima di fare i calcoli
(punto e basta ogni altra soluzione è superflua od errata)
Function arrotondaeuro(varNr As Double, Optional varPl = 2) As Double
' by Konrad Marfurt + ? + Karl Donaubauer + Fanton Emanuele
'varNr: numero da arrotondare
'varPI: numero di decimali (due predefinito)
varNr = Nz(varNr, 0)
   arrotondaeuro = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) /
(10 ^ varPl)
End Function
Saluti.
Emanuele.